既然我们说到了服务器端的开发,我们就不得不提起多线程和并发的问题,因为如果没有多线程和并发,是不可能做网络服务器端的,除非你的项目是 base 在 Nginx 或者 Apache 之上的。
多线程和并发究竟有什么区别和联系?
提到并发,不得不提到并行,所以我就讲这三个概念:并发、并行,以及多线程。作为初学者,你或许不太明白,多线程和并发究竟有什么区别和联系?下面我们就分别来看看。
并发出现在电脑只有一个 CPU 的情况下,那如果有多个线程需要操作,该怎么办呢?CPU 不可能一次只运行一个程序,运行完一个再运行第二个,这个效率任谁都忍受不了啊!所以,就想了个办法。
CPU 将运行的线程分成若干个 CPU 时间片来运行。不运行的那个线程就挂起,运行的时候,那个线程就活过来,切换地特别快,就好像是在同时运行一样。
你可以想象这个场景,有一个象棋大师,一个人对十个对手下棋,那十个人轮流和他下。大师从 1 号棋手这里开始下,下完 1 号走到 2 号的棋手面前,下 2 号棋手的棋,一直轮流走下去,直到再走回 1 号棋手这里再下一步。只要象棋大师下象棋下得足够快,然后他移动到下一位棋手这里又移动得足够快,大家都会觉得好像有十位象棋大师在和十个对手下棋。事实上只有一位象棋大师在下棋,只是他移动得很快而已。