说到网络编程,每个人理解都不一样。我问室友你知道网络编程么,就是socket编程么?他说nodejs起个网络服务呗?这样说也没毛病。
通常提到网络编程离不开,一些词汇,不如说通常提到面试知识点离不开一些词汇。什么阻塞、非阻塞、同步、异步,然后还有线程模型,比如单进程(单进程就意味着单线程了)、单进程多线程、多进程、或者多进程多线程。
如果面向面试学习,可能就背下这些词汇的不同吧。我是这么理解的。我没有这方面经验。所以,姑且这么一想。
搜过一些零散的文章(这个网上很少搜到),看了几个零散的视频。发现,似乎懂了。比如我看海纳老师讲IO模型(b站上有https://www.bilibili.com/video/BV1Vv411A7Zx?p=1),他讲的挺好的。但是看完之后我跟朋友讨论,发现我还是没搞懂。
懵逼的点在于比如说异步?是ajax那种异步?还是,golang 或者swoole 同时发了两个协程的异步?就很懵。比如阻塞,异步了不就不阻塞了?于是交叉懵逼。
后来我搞懂了,异步、阻塞 这些词汇。我觉得要搞懂概念,首先先了解概念发生的地方是哪里。阻塞实际上指的是IO层面的,比如read 、write系统调用。是拿到数据返回(阻塞,等待数据准备好)?还是立刻返回(非阻塞,先返回)?异步这个词,实际上说的是异步IO的模型。epoll是异步IO模型么?它不是,linux没有异步IO模型。很多时候epoll跟异步扯上关系,我觉得不要跟异步IO模型混淆。可以理解为,数据没有准备好,这个服务并不会停止服务,还能做其他事情(这句话就会让人很懵逼,到底做啥事情,所以抽象的描述,会让人更抽象的想象)。简单来说,单个进程处理一个qps请求。socket 数据没有到来,在没有多路复用的函数情况下。只能等待请求数据到达后处理。就只能服务一个请求。如果有epoll加持(假如能支持2个请求)。当一个请求过来,不会停止服务,就是说这个请求在等待数据,它还能再接一个请求。我是这么理解的。当然知识需要咂摸需要温顾,每次就不同感受了。
如果,觉得我说的不好的。没关系。我也没有100%掌握。所以无法授人一鱼。我只能授人以渔了。怎么突然我就懂了。开始带货。很多时候我不能指望几篇文章跟几个视频就知全貌(不是说人家写的不好)。还是得系统学习。
首先推荐一些资料。我觉得帮助比较大的。
极客时间 盛延敏 《网络编程实战》
传智播客 32期 C/C++就业班视频 (有一部分是讲网络编程)(下面那张图是24期的课程,但是后来我发现32期也挺好的,干脆学新不学旧了)
以上,两份资料就可以扫盲了。如果让我排序那么,可以先看传智的视频,视频比文字好理解,加上商业化的培训的确有它的价值。你比如,听王道考研讲基础就是比有的大学公开课讲的基础讲的到位。
极客时间的,可以买到,但是传智的视频。可能需要你自己找了。认真找网上可以找到的。
好了。就到这里了。没搞懂网络编程的。看完就懂了哦。