理解操作系统核心概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)协程的实现

 

猜你喜欢

转载自blog.csdn.net/themagickeyjianan/article/details/88370366