对于单核CPU ,某一时刻只能进行一项任务,要进行任务切换,任务切换要有时间开销。
对于多核CPU(双,4,8...)
主要目的:CPU同时执行多个任务,提高性能。
实现并发:1.使用多进程实现;2.单个进程中,创建多个线程。
多进程:进程之间的通信。
eg:账号服务器和游戏逻辑服务器是两个进程。两个进程要进行通信。
同一个电脑:管道,文件,消息队列,内存共享。
不同电脑:socket通信技术。
多线程:在单个进程中创建多个线程。
特点:
线程是轻量级的进程,每个线程都有自己独立的运行路径,一个进程中的线程共享地址空间。
进程之间的传递:全局变量,指针,引用可以在线程之间引用。多线程开销小于多进程。
数据一致性问题:共享内存带来的问题。
优先考虑多线程编程。
win下:.exe
Linux下: rwxrwxrwx(x执行权限)
进程:运行一个可执行程序,就开启一个进程。
进程:运行起来的可执行程序。
进程可以在任务管理器中看到。
运行可执行程序:
win下:双击可执行文件;
Linux下:./文件名。
每个进程,都有一个主线程;有进程,必然有主线程。
主线程唯一,一个进程中只有一个主线程。
运行可执行程序,产生一个进程,然后就会自动产生一个主线程。
运行程序的时候,实际上是进程的主线程来执行main函数的代码。
主线程和进程的寿命一致,主线程结束了,对应的进程也就结束了。
线程:是用来执行代码的。可以理解为一条代码的执行道路。
eg:主线程是从main函数开始,到return 结束。
每新建一个线程,就可以在同一时刻多干一件不同的事。
线程不可以建很多(200-300),每建立一个线程,就会消耗大量的堆栈空间(占据内存,大约1M);切换会占用时间。
一个进程至少有一个线程,就是主线程。
多线程可以同时干多个事,来提高效率,但是并不是越多越好。
优点:启动快,轻量级;
采用共享内存的通信方式,执行速度快,系统资源开销少。
缺点:存在数据一致性问题。
之前的:不可以跨平台。
C++11新标准线程库:C++语言本身增加了多线程的支持,支持跨平台开发。