线程与进程

  这是一个网上已经讨论烂了的议题。之前没有接触多进程编程,对于多进程与多线程的了解总是感觉的有点没有吃透的感觉。

 下面讲讲自己对已二者的理解。


 进程是资源分配的最小单位,线程是CPU调度的最小单位。

 进程是程序的一次执行,进程由内核来控制,有进程队列task_struck。程序由代码段,数据段,堆,栈组成

 内核通过调用exec加载这些数据到内存中,这些是进程的资源。每个进程都有自己独立的资源,由于代码段是只读的,因此代码段是可以共享的。

 也就说即使两个进程是父子关系,他们的数据段,堆,栈段都是自己独有的。

 而线程只是进程中的某一个模块或者功能的执行,他们共享所在进程的怎个数据段和堆段,只有自己独立的栈段。


 那么此时二者的区别很显然了。

 我们最常用的多进程是PC上各个不同的应用,对线程可能是某个应用的不同模块。

 这样设计的原因是,各个不同的应用之间不需要或者很少需要共享数据,而且也要保证自己应用的数据不能随便被其他应用修改,因此采用多进程是合理的

 因为多进程间通信是件比较麻烦的事,需要经过内核,比如管道,消息队列,共享内存,信号量,socket这些都是由内核提供,在各个进程之间有一个对应的映射,大家可以修改。


 多线程的优势在于可以共享所在进程的数据段,和堆段,因此不同模块为了保证可以并发,但是二者之间又需要通信,传递数据,这时候多线程的优势就有显现了。


 前面所讲的 对进程是针对不同应用,那么同一应用要保证并发,应该如何处理呢?比如网络服务器的并发?

看了一下网上的答复,有人说是使用多线程,又有人说是使用多进程。

采用多线程的理由是,多进程开销大。

我个人觉得要因情况而定,当服务器并发不需要写入数据时,其实多进程与多线程差别不大,因为进程采用copy-to-wirte技术,也就说如果不写入数据,子进程并不会拷贝

父进程的数据段和堆栈段。多进程可以保证数据的安全,但是多进程同时写入,这个也是需要考虑的同步的问题。

对于多线程来说,线程间的同步可能就要容易的多,如果有大量的写入操作。但是多线程的弊端在于一旦线程挂掉或者内存泄露

会导致整个进程都崩溃。多进程则不会。

对于安全性要要求不那么高的需求来说,个人更倾向于多线程。


总结:归根到底是内存空间与数据安全的问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值