C++——多进程并发与多线程并发

1. 多进程并发

优点:

  • 将应用程序分为多个、独立的、单纯和的进程,它们运行在同一时刻,就像你可以同时进行网页浏览和文字处理,这些独立的进程可以通过所有常规的进程间通信渠道互相传递信息(信号、套接字、文件、管道等)。
  • 操作系统在进程间提供的附加保护操作和更高级别的通信机制,意味着可以比线程更容易地编写安全的并发代码。
  • 使用独立的进程实现并发,可以在网络连接的不同的机器上运行独立的进程,虽然这增加了通信成本,但在一个精心设计的系统上,这可能是一个提高并行可用行和提高性能的低成本方法。

缺点:

  • 这种进程之间的通信通常设置复杂,或是速度较慢,或两者兼备,因为操作系统通常在进程间提供了大量的保护,以避免一个进程不小心修改了属于另一个进程的数据。
  • 运行多个进和所需的固有开销:启动进程需要时间,操作系统必须投入内部资源来管理进程。

2. 多线程并发

优点:

  • 每个线程相互独立运行,且每个线程可以运行不同的指令序列。但进程中的所有的线程都共享相同的地址空间,并且从所有线程中访问大部分数据——全局变量仍然是全局的,指针、对象的引用或数据可以在线程之间传递。
  • 共享的地址空间,以及缺少线程间的数据保护,使得使用多线程相关的开销远小于使用多进程,因为操作系统有更少的簿记要做。

缺点:

  • 虽然通常可以在进程之间共享内存,但这难以建立并且通常难以管理,因为同一数据的内存地址在不同的进程中也不尽相同。
  • 共享内存的灵活性是有代价的:如果数据要被多个线程访问,那么必须确保当每个线程访问时所看到的数据是一致的。

你可能感兴趣的:(C/C++,C++并发)