我从来没有在并发编程上做过什么。我对它们的了解仅来自操作系统书。
我在今天的一次采访中遇到了这个问题。 我想知道是否有人可以给我一个直观的
关于多线程和多进程的说明以及何时选择它们。或者,也许你可以
向我推荐一些带有实际示例的书籍或链接。我想阅读源代码
开源项目(C/C++)具有并发编程功能,希望大家能推荐一个。
非常感谢您的任何帮助。
多线程:
- 执行在线程之间分配;在某些操作系统上,这些线程比进程轻;在Linux上,它们使用相同的数据结构在内部实现。
- 线程共享内存,因此必须通过互斥机制(例如,信号量、互斥锁、条件变量等)来保护全局共享数据结构。
- 在 Linux 上,pthread 库(代表"POSIX threads")在用户级别提供多线程支持;线程是使用 pthread_create() 创建的;这个库可以通过使用 -pthread 选项编译在普通的 C/C++ 程序中使用。
多进程:
- 执行在进程之间拆分
- 进程传统上不共享内存;然而,在Linux上,进程也可以通过合适的系统调用共享内存。
- 在POSIX系统(例如Linux)上,进程是通过fork()系统调用创建的:一个进程(称为"父进程")可以创建("分叉")另一个进程(称为"子进程")。C/C++ 程序不需要链接到任何外部库来调用 fork()。
- 数据通常通过消息传递机制(例如管道、FIFO 和套接字)进行交换
使用多线程还是多进程的决定通常取决于两个因素:
- 如果需要在不同执行实体之间共享数据。消息传递机制不如共享内存快速和灵活。因此,在某些情况下,最好使用线程而不是进程。
- 可靠性:多进程应用程序通常更可靠,因为一个进程的崩溃不会影响其他进程。
最后一点:非常复杂的应用程序可以同时具有多线程和多进程,以满足软件特定部分的需求。