何时选择多线程或多处理?

时间:2013-11-12 11:44:18

标签: multithreading concurrent-programming

我从未在并发编程上做过什么。我对它们的了解仅来自操作系统 图书。

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

多线程和多进程的解释以及何时选择它们。或者,也许你可以

向我推荐一些书籍或实际示例链接。我想阅读

的源代码

开源项目(c / c ++),带有conccurent编程,希望你能推荐一个。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:11)

<强>多线程:

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

<强>多进程:

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

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

  1. 如果您需要在不同执行实体之间共享数据。消息传递机制比共享内存更快,更灵活。因此,在某些情况下,最好使用线程而不是进程。
  2. 可靠性:多进程应用程序通常更可靠,因为进程崩溃不会影响其他进程。
  3. 最后一点:非常复杂的应用程序可以同时具有多线程多进程,以满足软件特定部分的需求。