美文网首页
网络编程核心概念阐述

网络编程核心概念阐述

作者: 撸代码的大白 | 来源:发表于2022-06-30 15:54 被阅读0次

    1、上线文切换:上线文切换发生在大量线程争夺cpu资源的场景下;要想上下文切换的成本降低,应考虑合适的线程总数,过量的线程会导致上下文切换成本增高。线程数应根据cpu数设定,一般io密集型是cpu数的两倍左右,计算密级型的一倍多点。

    2、socket:代表连接,socket数量与线程数没有严格的关系。

    3、堵塞:堵塞的意思是,服务器线程被堵塞,既服务器线程处理socket时,一个线程处理完一个socket之后才能处理下一个,如果此时socket没有操作请求要处理,线程也不能去处理其他socket操作请求

    4、selector:将处理粒度由socket变为具体的操作请求,解决堵塞问题,选择空闲状态线程分配具体的操作请求。

    5、同步与异步:同步是调用方始终在等待处理结果,而异步是等处理完了通知调用方

    6、异步回调:既处理完后,根据事先注册的函数,执行下一步操作。

    7、协程:更细粒度的控制线程处理的任务,有点类似细粒度的任务,通过挂起和唤醒操作,切换线程处理的任务,来充分压榨cpu,让线程始终处在忙碌状态。线程的上线文切换成本,比线程内任务切换成本要高,将任务分为段,当不需要cpu参与的段,让出资源,更细粒度的控制线程执行的任务,使线程始终处于忙碌状态而不至于陷入空等。

    总结:

        实际上对于io处理的场景,实际上都是为了不让cpu空等,如何让cpu不空等呢?就是把任务拆碎,使其更细粒度;举个例子,如果线程是餐厅服务员,而任务是服务客户吃饭;如果任务粒度是服务客户吃饭,那么客户自己吃饭不需要服务员服务的时间,服务员就是闲置的。而如果把服务客户吃饭拆分成,指引到桌、提供餐具、上菜、收盘子等操作,那么服务员就是不停的在这几个工作中循环,客户不需要服务的时候后,服务员在伺候其他桌的客户。

       而这里面有个关键点,在于通知,也就是你把原来一整个的任务拆分了,那相当于同步转异步了,那什么时候进行下一步呢?你就需要客户主动通知,然后统一协调任务。也就是触发和响应。或者是如何使用异步回调,来推动这个任务的继续进行。

       至于协程就是将原来线程处理的任务,更细粒度化。

    相关文章

      网友评论

          本文标题:网络编程核心概念阐述

          本文链接:https://www.haomeiwen.com/subject/xrwfbrtx.html