彻底理解协程

彻底理解协程

协程不是操作系统的底层特性,系统感知不到它的存在。它运行在线程里面,通过分时复用线程的方式运行,不会增加线程的数量。协程也有上下文切换,但是不会切换到内核态去,比线程切换的开销要小很多。每个协程的体积比线程要小得多,一个线程可以容纳数量相当可观的协程。在IO密集型的任务中有着大量的阻塞等待过程,协程采用协作式调度,在IO阻塞的时候让出CPU,当IO就绪后再主动占用CPU,牺牲任务执行的公平性换取吞吐量。

彻底理解线程

彻底理解线程

操作系统支持多个应用程序同时执行,每个应用至少对应一个进程,彼此之间的操作和数据不受干扰。当一个进程需要磁盘IO的时候,CPU就切换到另外的进程去执行,提高了CPU利用率。CPU在不同的进程之间切换执行,任务多的时候一直处于工作状态。有了进程,为什么还要线程?因为进程的成本太高了。启动新的进程必须分配独立的内存空间,建立数据表维护它的代码段、堆栈段和数据段,这是昂贵的多任务工作方式。如果两个进程之间需要通信,要采用管道通信、消息队列、共享内存等等方式。线程可以看作轻量化的进程,或者粒度更小的进程。线程之间使用相同的地址空间,切换线程的时间远远小于切换进程的时间。一个进程的开销大约是线程开销的30倍左右。

彻底理解进程

彻底理解进程

操作系统的”进程”很早就出现了,许多教科书上定义这个概念总是晦涩难懂。计算机技术发展太快了,简单的概念经过无数次演化,也会变得复杂。我们追溯一下操作系统的发展历史,就能理解进程解决了什么问题、为什么这样设计。进程是独立功能的程序的一次动态执行过程,也是系统资源分配的独立实体。每个进程都拥有独立的地址空间。一个进程无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,要使用进程间通信,比如管道、文件、套接字等。

寻味人生(16)丝瓜鸡蛋汤

寻味人生(16)丝瓜鸡蛋汤

每个中国人的家庭都有几道拿手的汤。汤的魅力在于温暖的触觉和悠长的味道,如果一个人不懂得喝汤,就一定没有美食的品味。逢年过节,把一大盆汤盛在小碗里,分发给家庭成员,象征着家族的团结和共享。家常的汤做法很简单,原料也比较廉价,最简单的是番茄蛋花汤、紫菜蛋花汤,复杂的就是莲藕排骨汤、黄豆猪蹄汤等等。

谈谈微服务的粒度

谈谈微服务的粒度

自从微服务的概念和应用流行起来之后,受“微”的影响,有些人认为微服务越小越好,这显然是极端的想法。任何架构设计都有优缺点,在合适的场景才能发挥更大的作用。明确粒度设计的上下限,是用好微服务的第一步。微服务的核心思想是“分治”,可以类比活字印刷术。每个字都有独立的印刷效果。坏掉的字可以被迅速替换,不影响其他字。

寻味人生(15)天门的哈散

寻味人生(15)天门的哈散

这种一排排的U形零食叫哈散,是湖北天门的特色食品。本质上,它就是油炸的面条,好看又好吃,保质期也很长。村里往往好几户人家一起搭伙,一次做上百斤,再平均分配。如今生活好了,大家也注重饮食健康了,油炸食品吃的少。再也不会像二十年前那样,做那么多哈散屯在家里。偶尔在街上碰到小贩,就买个两三斤,边吃边追忆往事。

WordPress文章链接发送给百度收录

WordPress文章链接发送给百度收录

为了更好的让百度索引博客页面,我一直采用百度站长提供的普通收录工具,主动推送新文章网址。程序员不能忍受重复的工作,我必须让这个活儿自动化。思路很简单:在文章状态变化的函数上挂载自定义函数,当文章发布后,触发函数调用HTTP模块提交网址。

日常开发方案设计指北

日常开发方案设计指北

互联网公司管理研发流程,常常使用TAPD一类的敏捷工具。一个需求从提出到上线要经历至少七个流程。初级工程师往往做不好需求评审工作。要么被产品经理牵着鼻子走,让干什么就干什么;要么预估不到隐藏的工作量,在开发排期阶段给出不合理的排期,导致开发时间紧张,最后加班应付测试。

我的不评价、不建议与不解释

我的不评价、不建议与不解释

在交情尚浅的人眼里,我肯定是个寡言少语的人。我确实不喜欢表达自己的心情和感受,除非遇到特别感兴趣的话题,才愿意多聊一些。我认为自己精神内耗很大,满脑子奇思怪想和烦恼琐事,有些事情不能对别人说,有些事情说了别人也不理解。为了让生活简单点,我遵循一个原则:不评价、不建议、不解释。

接口耗时10秒如何优化为1秒

接口耗时10秒如何优化为1秒

技术面试中,一定会被问到性能优化有关的问题。这一类问题大多数都是开放性的,考察求职者的知识储备和逻辑思维。我们的脑洞可以开大一点,多说一些解决方案,充分展示自己的能力。比如这个题:一个接口耗时10秒,如何优化为1秒?这个问题脱离实际生产情况,属于八股文。如果生产环境中出现性能低下的接口,通常怎么应对?