12

我从来没有做过关于并发编程的事情。我对它们的了解仅来自操作系统书籍。

我今天在接受采访时遇到了这个问题。我想知道是否有人可以给我一个直观的

关于多线程和多进程以及何时选择它们的说明。或者,也许你可以

向我推荐一些带有实际示例的书籍或链接。我想阅读源代码

并发编程的开源项目(c/c++),希望大家推荐一个。

非常感谢您的任何帮助。

4

1 回答 1

15

多线程:

  • 执行在线程之间拆分;在某些操作系统上,这些线程比进程轻;相反,在 Linux 上,它们是使用相同的数据结构在内部实现的。
  • 线程共享内存,因此全局共享数据结构必须通过互斥机制(例如,信号量、互斥量、条件变量等)来保护
  • 在 Linux 上,pthread库(代表“POSIX 线程”)在用户级别提供多线程支持;线程是使用 pthread_create() 创建的;通过使用-pthread选项编译,此库可用于普通 C/C++ 程序。

多进程:

  • 执行在进程之间拆分
  • 传统上,进程不共享内存;然而,在 Linux 上,进程也可以通过适当的系统调用共享内存
  • 在 POSIX 系统(例如 Linux)上,进程是通过fork()系统调用创建的:一个进程(称为“父”)可以创建(“fork”)另一个进程(称为“子”)。C/C++程序不需要链接到任何外部库来调用fork()。
  • 数据通常通过消息传递机制(例如,管道、fifos 和套接字)进行交换

使用多线程或多进程之间的决定通常取决于两个因素:

  1. 如果您需要在不同的执行实体之间共享数据。消息传递机制不如共享内存快速和灵活。因此,在某些情况下,最好使用线程而不是进程。
  2. 可靠性:多进程应用程序通常更可靠,因为一个进程的崩溃不会影响其他进程。

最后一点:非常复杂的应用程序可以同时使用多线程多进程来完成软件特定部分的需求。

于 2013-11-12T11:53:27.830 回答