设为首页 收藏本站
查看: 747|回复: 0

[经验分享] golang、c++,并发、并行(一)

[复制链接]

尚未签到

发表于 2018-9-20 09:24:25 | 显示全部楼层 |阅读模式
  golang、c++,并发、并行(一)
  正式接触golang大半个月,写了几个练习项目,让人有些感概。
  Golang这样的自动化内存管理水平和并发调度能力,让我印象很深。
  单是那样的内存管理水平,通过加入特定的并发优化c++内存池,我可以做到。
  那种并发调度能力,通过引入复杂的调度算法,也勉强可以做到。
  但是这两个加在一起,配合出色的跨平台标准库,组成这样的一个并发友好跨平台生态,这我五年之内可能都做不到。
  没有用c++写过高并发代码的人,可能很难理解这种复杂的情绪。
  这是一种,久渴的人,突然在沙漠中看到一片绿洲的感觉,惊喜万分;而后又发现原来这个绿洲一直就在你身旁。但你却不停错过的悔恨。
  c++的高并发编程,一个听的人感觉很有逼格,写的人累死的事情。
  这是在11版前,甚至连跨平台线程模型都没有的环境。
  这是连标准库一个小小的random生成器都没有实现并发安全性的环境。
  这是一个需要面对海量第三方库,然后基本上没有文档,和一堆编译问题和运行bug的环境。海量到,最后已经完全麻木,只感觉眼前不停地飞过一个又一个库名,一个又一个错误。等你费了吃奶的劲,终于都正常运行了。才又发现,只是串行情况下运行正常。那并发运行呢?
  这是一个在沙子上建立的楼房。或许一声咳嗽后,就会顷刻倒塌。
  就是这么一片糟糕的环境。扑面而来的蛮荒与原始,让你怀疑还活在上个世纪,活在穿孔卡片式计算机的时代。
  06年,计算机正式进入多核元年。
  以前只在大型机、小型机上,使用的昂贵玩意儿,开始大规模出现在桌面pc和廉价服务器上。
  一个让硬件工程师,大松一口气,“终于他妈的,从功耗、主频陷阱解脱了。”他们成功的甩掉了一个沉重的包袱。
  而软件工程师,开始戴上了沉重的枷锁。心里一万头。。。奔过。“免费午餐”正式结束。
  并发、并行两个坑爹货正式进入大多数程序员的视野。
  线程级的并发、并行
  线程级并发,是一种使用多线程进行程序流程设计的方式。(和单核的指令级并行不同)
  在单核时代,主要是应用于gui,网络通信等要求低延迟高响应的场景。
  线程级并行,是一部分并发在多核cpu上的一种表现。
  。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  简单举例:
  程序a,包含100斤肉、50斤淀粉、10斤香辛料。
  单核cpu,一座火腿肠工厂。
  串行:
  100斤肉-->50斤淀粉-->10斤香辛料-->火腿肠工厂-->火腿肠
  把肉、淀粉、香辛料运入工厂,一分钟(60秒)后,工厂生产出160斤火腿肠。
  现在客户说一分钟太久了,要一边运进原料一边生产出火腿肠。降低出货时间。
  并发:
  10斤肉-->5斤淀粉-->1斤香辛料-->火腿肠工厂-->火腿肠
  (然后重复)
  10斤肉-->5斤淀粉-->1斤香辛料-->火腿肠工厂-->火腿肠
  。。。
  现在可以做到0.1分钟(6秒钟)就生产出16斤火腿肠。
  现在老板说火腿肠生产的太慢,要扩大工厂规模。于是找来了工程师,工程师说,继续扩大单个工厂成本太高,划不来。不如,再建一座新工厂。
  程序a,包含100斤肉、50斤淀粉、10斤香辛料。
  双核cpu,两座火腿肠工厂,工厂a、工厂b。
  继续用上面并发生产方式:
  (两座工厂同时生产)
  10斤肉-->5斤淀粉-->1斤香辛料-->火腿肠工厂a-->火腿肠
  10斤肉-->5斤淀粉-->1斤香辛料-->火腿肠工厂b-->火腿肠
  现在0.1分钟(6秒钟)运入20斤肉、10斤淀粉、2斤香辛料,
  (10*2斤肉、5*2斤淀粉、1*2斤香辛料)
  生产出32(16*2)斤火腿肠。
  这就是并行。
  。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  下一篇结合语言继续扯。。。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-598657-1-1.html 上篇帖子: golang 微服务以及相关web框架 下篇帖子: Golang开发环境搭建-Vim篇
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表