您的位置:首页 > 其它

POSIX线程-为什么要用线程

2015-07-04 16:47 274 查看
最简单的回答是:线程比进程更快,开销更小。考虑一下下面的场景:

1. 当需要在在进程间共享数据时,我们必须使用IPC来进行通信,因为两个进程间没有“天生”的共享内存区(进程要求虚拟空间独立,如果想共享数据,必须把这几个进程的某个地址映射到相同的物理内存上)。IPC的使用将会导致开销上升。
2. 需要创建新进程时,我们使用fork()函数。虽然该函数不会拷贝所有的数据,但是最基本的数据,比如页表,文件描述符表等还是需要创建的。这也会导致开销上升。

而线程完全不会有上面的问题。两个线程之间的数据共享是很自然的事,因为同一进程的线程都在一个虚拟地址空间,数据的共享就像变量赋值一样(但要注意同步问题)。线程的创建也比进程的创建快,因为它不需要复制和创建很多数据。

当然,线程并不是用来替代进程的,它自身也有缺点,它的出现只是给了程序员另一种选择。比如我们在线程中使用的函数必须是thread-safe的(即多个线程访问同一函数不会影响输出的结果);一个线程的bug很可能会引起该进程的崩溃(所有的线程都在同一个虚拟地址空间内,一个线程能很容易的访问到另一个线程的空间),线程间可能会有同步问题。所以使用线程的程序必须很小心的设计和实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: