论坛首页 编程语言技术论坛

多线程是个不靠谱的东西

浏览 33019 次
该帖已经被评为精华帖
作者 正文
   发表时间:2008-05-06  
如果把cpu的设计跟软件的设计比较一下 可以发现cpu从一开始(80年代起)就把并发放到生死攸关的位置 设计一个cpu很大程度上是想尽办法同时发起更多的计算 cpu的道路也一直都是向着增加流水线的方向前进 并为此付出很多代价 譬如mips下指令长度是一样的
而软件好像才刚刚苏醒 意识到并发的必要性
所以软件落在了cpu后面
借鉴一下cpu设计的思路的话 或许可以得出结论 并发是一个必须从一开始就考虑的问题 不存在平滑的从顺序过渡到并发的算法/思路
0 请登录后投票
   发表时间:2008-05-06  
引用
借鉴一下cpu设计的思路的话 或许可以得出结论 并发是一个必须从一开始就考虑的问题 不存在平滑的从顺序过渡到并发的算法/思路

如果存在咋办涅???
0 请登录后投票
   发表时间:2008-05-06  
Trustno1 写道
引用
我们不缺工具,但缺best practise

面对并行,我们现在缺的就是工具



我觉得工具还不是问题,是缺少一种思考方式. 面向Task的思考..
0 请登录后投票
   发表时间:2008-05-06  
还有 如果erlang的方法是自己维护自己的线程 从而避免上下文切换
那么这种工作很早就有了 譬如bsd的lth
事实上 thread的实现一直都有各种实现 包括在os里面实现的 也包括在user space实现的 只不过linux喧嚣尘上的气势让一对一模型大行其道 连solaris都向这个方向靠拢 而bsd那种模型则只在些老应用上采用
0 请登录后投票
   发表时间:2008-05-06  
ray_linn 写道
Trustno1 写道
引用
我们不缺工具,但缺best practise

面对并行,我们现在缺的就是工具



我觉得工具还不是问题,是缺少一种思考方式. 面向Task的思考..

恩这种思考方式不能说不对,但是还是粒度的问题。
在更小的粒度上以这种方式思考就会陷入误区.
0 请登录后投票
   发表时间:2008-05-06  
Trustno1 写道
引用
借鉴一下cpu设计的思路的话 或许可以得出结论 并发是一个必须从一开始就考虑的问题 不存在平滑的从顺序过渡到并发的算法/思路

如果存在咋办涅???


那就学咯
0 请登录后投票
   发表时间:2008-05-06  
Parallel C#是种更有意思的方案,它可以在function面前加上"同步" "异步" "可移动" 的关键字,对思考来说更有意义.
0 请登录后投票
   发表时间:2008-05-06  
ray_linn 写道
Parallel C#是种更有意思的方案,它可以在function面前加上"同步" "异步" "可移动" 的关键字,对思考来说更有意义.

这个放案,很难解决这样的问题.
引用
首先我排除了大部分的文件读写操作,顺序读取会导致文件指针的移动,这显然会导致不确定数据结果,特别是要把数据填充到一系列结构(Struct)中去的时候,多线程产生了一堆错误的结果。
0 请登录后投票
   发表时间:2008-05-06  
Trustno1 写道
ray_linn 写道
Parallel C#是种更有意思的方案,它可以在function面前加上"同步" "异步" "可移动" 的关键字,对思考来说更有意义.

这个放案,很难解决这样的问题.
引用
首先我排除了大部分的文件读写操作,顺序读取会导致文件指针的移动,这显然会导致不确定数据结果,特别是要把数据填充到一系列结构(Struct)中去的时候,多线程产生了一堆错误的结果。



别卖关子了 指条明路吧
0 请登录后投票
   发表时间:2008-05-06  
Trustno1 写道
ray_linn 写道
Trustno1 写道
引用
我们不缺工具,但缺best practise

面对并行,我们现在缺的就是工具



我觉得工具还不是问题,是缺少一种思考方式. 面向Task的思考..

恩这种思考方式不能说不对,但是还是粒度的问题。
在更小的粒度上以这种方式思考就会陷入误区.


指令并行?在现有的架构上根本无法实现。
操作系统以线程做最小的调度单位,
单个CPU需要做任务状态切换,多个CPU之间寄存器不共享。指令乱序,流水线这些设计对软件是透明的,你一个用户态程序怎么做指令并行?
还是老老实实做好设计更实际。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics