版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/themagickeyjianan/article/details/88370366
背景:上大学时,学习操作系统完全不知道这门课到底用来干什么,毕业工作到今天第5年,学习游戏服务器时,才理解到大学操作系统课程如此重要,一些核心概念不理解,无法继续深入学习。下面是一些核心概念:
1)多进程
2)异步io
3)文件、管道、socket
4)tcp协议栈-->抽象为文件句柄-->socket-->一个端口多个客户端连接:
之所以服务器一个端口可以连接多个客户端,就是因为操作系统把一个个连接抽象为文件句柄。
5)redis单线程高并发的原理:
作为初级理解,认为单线程怎么可能做到高并发,其实redis就是单线程,那是因为redis处理的时候,操作很单一,如果一次操作执行一个算法需要1s,那么神仙也做不到高并发,这样一个1s的耗时过程将会阻塞住主线程,无法高并发;
所以需要把每个请求处理最简单,则自然高并发,因此单线程程序,所以需要把这个1s的耗时操作放到工作队列中处理,这1s的耗时操作不要让它阻塞主线程,像node.js等使用起来对用户来说是单线程,如操作一个数据库,那么必然数据库这操作是放到线程池等处理的,处理完,利用线程或者进程间通信,告诉主线程结果即可。
6)多线程的问题:
比如一个房间的游戏,多线程很难写逻辑。
7)moba服务器:
一个是游戏主线程,打开数据库等操作按道理肯定阻塞主线程,所以使用工作队列处理mysql,有结果再返回。
8)操作系统基本调度原理搞明白就可以了:
说白了,就是把耗时操作从主线程挪开。
9)多线程服务器skynet:
线程的调度和事件通知都是由成本的,设计门槛高时,使用门槛低;
skynet思想就一个:线程池驱动actor,每个房间游戏,一个actor,所以这个房间不会卡主另外一个房间;
最重要的:调度是动态的。
10)多进程利用多核资源原理:
根据cpu核心,启动线程,发挥核心优势;
进程和线程, os会调度cpu核心去执行它们,并不断切换,多个cpu核心一次调度一个进程 或 多个线程,所以多进程可以发挥多核优势;
只不过多线程是系统级别,多进程可以分布式部署多个机器。
11)讲课和做项目:
开始必然糟糕,但是 以后肯定越来越好,每个接口怎么写不是重点,因为一个项目肯定有些地方不尽如人意,项目可控稳定即可,我们应该追求的是:代码问题,我们能迅速找出;
不断学习不断尝试,看书,搞明白基本原理。不要多想很多概念。
12)协程的实现