粗略地讲,进程是运行在内存中的程序。在陈硕的muduo网络库一书中引用了《Erlang程序设计》中的一个比喻,这个比喻从一个角度对进程进行了形象描绘。

由于每个进程都有自己独立的地址空间,这里把每个进程比作一个人,每个人都有自己的记忆memory,人和人之间通过对话(消息传递)来进行信息传递。对话既可以当面谈(在同一台机器中),也可以在电话里谈(分布式系统的网络通信),面谈和电话谈的区别是,面谈可以立即知道对方是否挂了,而电话谈由于在不同机器中,只能通过心跳包来判断对方是否还活着。

设计分布式系统:
分布式系统可看作一个团队,团队里的几个人分别就是分布式系统里的几个进程,每个人的主要任务不同,执行的任务主要由进程的代码决定。在这个团队里每个人都有自己的记忆memory,想要知道别人的看法,只能通过交谈。

  • 容错:万一有人突然死了
  • 扩容:团队中有新人加入
  • 负载均衡:把某个负担过大的人的任务分给另一个人做
  • 退休:甲要修复bug,先不派新任务,等他做完手上的事情重启。

线程的特点是共享地址空间,可高效共享数据,多线程编程的价值是为了更好的发挥多核处理器的优势。