32
回答
线程和进程区别
华为云4核8G,高性能云服务器,免费试用   

用简单的例子说明, 你如果想同时拨电话给 A, B,那么可以这么做.

用两个电话, 分别拨出,然后分别对他们说话 -- 多线程设计,线程共享全局数据

找小张,小王,让他们分别打电话给A,B -- 多进程设计,多进程的数据是完全隔离,必须通过进程间通信,解决数据共享的问题.

进程比线程更健壮稳定,但是设计更为复杂. 多线程很容易同步状态,相当于一个人同时处理多个任务, 多进程难度就比较高,相当于团队管理. UI中线程运用较多. 高性能服务设计当中,只用进程,因为隔离度高. 

比如Oracle/msqlserver 都有专门的进程负责读写,专门的进程负责记录日志,专门的进程负责网络连接.... 非对等多进程(进程分别负责不同的事情),可以非常好的管理并发问题. 而mysql 是对等多线程/进程(所有进程/线程做同样的事情), 必然遇到争用的问题, 所以mysql 是无法很好处理并发写,除非整个软件重写. 这也是宏哥认为mysql 不是数据库的其中一个原因.

Open source的大多软件,都可以作为反面教材,尤其是在软件设计领域.

同时win 的进程和 linux进程有所不同. Linux对父进程进行完整拷贝,win 类似linux中轻进程.互相不等价.

线程比进程更快,是完全扯淡的东西. 线程唯一的优势是数据共享简单,以及Bootstrap成本更低,代价就是一个线程出问题,全部挂掉. 典型比如Java虚拟机这个烂玩意.

<无标签>
举报
宏哥
发帖于6年前 32回/2K+阅
共有32个评论 最后回答: 6年前
Unix的传统思想一直是摒弃线程的,线程带来的问题比它的好处要多得多。多核系统要想充分利用资源,完全可以使用某种负载均衡机制把任务均分到多个进程上

引用来自“mallon”的答案

其实一个好的UI结构也是用不到线程的,比如Windows UI的消息机制,Web就更不用说了
好的UI结构一定是多线程的. 为了解决阻塞的问题.

引用来自“mallon”的答案

Unix的传统思想一直是摒弃线程的,线程带来的问题比它的好处要多得多。多核系统要想充分利用资源,完全可以使用某种负载均衡机制把任务均分到多个进程上
多进程编程更复杂.
更多的时候使用线程只是为了程序体验更亲民一些 通常用在GUI编程上 但是需要付出很多不必要的学习代价 线程不是简单的PPID PPPID复制 处理器中断和死锁机制 让人头疼 win下所谓的消息机制的本质还是管道通讯 或者叫Unix原始套接字的win移植版
管道本身也是程序
至于说 到底哪个好? 这要看win和linux的源码怎么实现线程了  win作为时间片轮训  线程进程一样糟糕: 一个程序卡死了 前台GUI挂掉 所有程序自然也就挂掉 无所谓线程进程谁不挂 都得挂  linux就是不断fork 父进程  只要"父亲"还在 儿子就在  内核本质上来说 本文的title实际是在讨论win VS Liunux谁的血统更优秀  不才在下认为 linux的抢占式任务处理机制和一切即文件的哲学使得linux早就超越了windows 尤其在军方领域 只是大多数老百姓程序员没机会领略而已
--- 共有 1 条评论 ---
mark35一切即文件,如同js中一切即对象一样,js是个精妙的语言,虽然在某些细节上有点让人纠结 6年前 回复
顶部