线程间到底共享了哪些进程资源

2021-02-24
阅读 4 分钟
2k
可是你真的理解了上面这句话吗?到底线程之间共享了哪些进程资源,共享资源意味着什么?共享资源这种机制是如何实现的?对此如果你没有答案的话,那么这意味着你几乎很难写出能正确工作的多线程程序,同时也意味着这篇文章就是为你准备的。

程序员应如何理解协程

2021-02-23
阅读 4 分钟
2.7k
作为程序员,想必你多多少少听过协程这个词,这项技术近年来越来越多的出现在程序员的视野当中,尤其高性能高并发领域。当你的同学、同事提到协程时如果你的大脑一片空白,对其毫无概念。。。

函数运行时在内存中是什么样子?

2021-01-31
阅读 5 分钟
1.3k
我们在之前的文章《高性能高并发服务器是如何实现的》一中提到了一项关键技术——协程,你知道协程的本质是什么吗?有的同学可能会说是用户线程,那么什么是用户态线程,这是怎么实现的?

高并发高性能服务器是如何实现的

2021-01-17
阅读 5 分钟
4k
当在读这篇文章的时候,你想过没有,服务器是怎么把这篇文章发送给你的呢?说简单也简单,不就是一个用户请求吗?服务器根据请求从数据库中捞出这篇文章,然后通过网络发回去。说复杂也复杂,服务器是如何并行处理成千上万个用户请求呢?这里面涉及到哪些技术呢?这篇文章就来为你解答这个问题。多进程历史上最早出现也...

10张图让你彻底理解回调函数

2021-01-16
阅读 6 分钟
7.6k
不知你是不是也有这样的疑惑,我们为什么需要回调函数这个概念呢?直接调用函数不就可以了?回调函数到底有什么作用?程序员到底该如何理解回调函数?

从小白到高手,你需要理解同步与异步

2021-01-13
阅读 4 分钟
4.3k
在这篇文章中我们来讨论一下到底什么是同步,什么是异步,以及在编程中这两个概念到底意味着什么,这些是进一步掌握高性能、高并发技术的基础,因此非常关键。

一文彻底理解IO多路复用

2021-01-08
阅读 5 分钟
7.8k
在讲解IO多路复用之前,我们需要预习一下文件以及文件描述符。什么是文件程序员使用I/O最终都逃不过文件。因为这篇同属于高性能、高并发系列,讲到高性能、高并发就离不开Linux/Unix,因此这里就来讨论一下Linux世界中的文件。实际上对于程序员来说文件是一个很简单的概念,我们只需要将其理解为一个N byte的序列就可以...

意想不到,这个神奇的bug让我加班到深夜

2021-01-02
阅读 3 分钟
1.2k
上线前照例忐忑不安了一番,因为工程量比较大,预估可能不会很顺利,但还不至于到了祈祷服务器不要出bug的地步,bug对于程序员来说简直是家常便饭,没有bug反而可能会嘀咕半天,这都是职业病,没治。

读取文件时,程序经历了什么?

2021-01-01
阅读 4 分钟
1.1k
当我们使用C语言中的printf、C++中的"<<",Python中的print,Java中的System.out.println等时,这是I/O;当我们使用各种语言读写文件时,这也是I/O;当我们通过TCP/IP进行网络通信时,这同样是I/O;当我们使用鼠标龙飞凤舞时,当我们扛起键盘在评论区里指点江山亦或是埋头苦干努力制造bug时、当我们能看到屏幕上的...

看完这篇还不懂高并发中的线程与线程池你来打我

2021-01-01
阅读 8 分钟
1.7k
从这篇开始将会开启高性能、高并发系列,本篇是该系列的开篇,主要关注多线程以及线程池。一切要从CPU说起你可能会有疑问,讲多线程为什么要从CPU说起呢?原因很简单,在这里没有那些时髦的概念,你可以更加清晰的看清问题的本质。CPU并不知道线程、进程之类的概念。CPU只知道两件事:从内存中取出指令执行指令,然后回到...

通往编程高手之路

2020-07-20
阅读 2 分钟
1.3k
亚达斯密在其经济学巨著《国富论》中提出了“看不见的那只手”的概念,意指市场机制对经济发展的作用,作为普通的个人来说我们在平时的生活中可能很难感受到市场机制所发挥的作用,但这只看不见的手却无时无刻不在发挥着它的作用。

程序?进程?傻傻分不清

2019-08-15
阅读 3 分钟
1.7k
我们用一个例子来形象的讲解一下这个区别。程序其实本质上和我们的菜谱非常类似,一个菜谱规定了完成一道菜的整个流程,一步一步每个节点执行什么样的操作,但是看一遍菜谱是不能变出一道美味可口的菜肴的。要想真正做出一道菜就应该按照菜谱的要求走一遍,准备好食材,按照菜谱的指导,打开燃气,锅热后倒入油,待油温...

四次挥手与Socket API

2019-08-13
阅读 3 分钟
3.1k
在《三次握手与Socket API》中我们详细讲解了三次握手以及与之相关的API,三次握手是TCP协议的初始阶段,用来建立双方通信连接,显然有建立连接就有断开连接,那么TCP是如何断开连接的呢?

三次握手与Socket API

2019-08-10
阅读 4 分钟
4.5k
一个连接唯一确定了发送方和接收方,除此之外一个连接还确定了双方“说话的方式”,三次握手规定:双方在说话前都要加一个数字,该数字用来记录这是彼此的第几句话了,比如:

如何实现一个简单的智能指针

2019-08-05
阅读 2 分钟
1.7k
所谓智能指针指的是一种用起来像指针但又无需关心内存管理的一种机制。 普通指针的问题 C/C++中指针极为常见,但普通指针最大的问题就在于需要程序员记住分配内存后要手动释放,否则就会有内存泄漏或者引用野指针的风险。 比如有这样一个简单的类: {代码...} 如果在堆上分配该对象的话,那么在使用完后必须调用delete释...

进程切换与线程切换的区别?

2019-07-13
阅读 2 分钟
14.5k
对于程序员来说,我们在编程时实际上是不怎么操心内存问题的,对于使用Java、Python、JavaScript等动态类型语言的程序员来说更是如此,自动内存回收机制的引入使得使用这类语言的程序员几乎完全不用关心内存问题;即使对于编译型语言C/C++来说,程序员需要关心的也仅仅是内存的申请和释放。

什么是程序?

2019-07-06
阅读 3 分钟
19.6k
虽然在这里我们主要关注的是操作系统,但毕竟操作系统的目的就是能更好的运行用户程序,而且该教程主要是站在程序员的角度来讲解操作系统的,作为程序员是绕不开程序这个话题的。因此在深入理解操作系统之前还是有必要来聊一聊程序是怎么一回事。

如何查看进程工作路径

2018-10-10
阅读 1 分钟
6.9k
比如,你在/home/mac下启动一个进程,那么该进程的工作目录就是/home/mac;如果你在/home/mac/bin下启动同一个程序,那么该进程的工作目录就变为/home/mac/bin。

如何查看进程开启了多少线程

2018-09-29
阅读 2 分钟
6.7k
为什么要知道某个进程开启了多少线程? 好奇,这个很重要 性能调优 概念澄清 这里所说的线程指的是内核级别的线程,不是用户态线程,所谓用户态线程是指不依赖操作系统而是在用户态下实现的执行流调度。 这里的线程个数指的是进程运行时的线程个数,这个数值会随着线程的创建和销毁而动态变化。 本文主要关注Linux平台。...

彻底理解链接器:四,重定位

2018-09-18
阅读 4 分钟
36k
程序的运行过程就是CPU不断的从内存中取出指令然后执行执行的过程,对于函数调用来说比如我们在C/C++语言中调用简单的加法函数add,其对应的汇编指令可能是这样的:

彻底理解链接器:三,库与可执行文件

2018-09-18
阅读 9 分钟
22.8k
在链接器可操作的元素这一节中我们提到,链接器可以操作的最小单元为目标文件,也就是说我们见到的无论是静态库、动态库、可执行文件,都是基于目标文件构建出来的。目标文件就好比乐高积木中最小的零部件。

彻底理解链接器:二,符号决议

2018-09-18
阅读 4 分钟
13k
在这个过程当中,链接器需要做的工作就是确保所有目标文件中的符号引用都有唯一的定义。要想理解这句话我们首先来看看一个典型的c文件里都有些什么。

彻底理解链接器:一,概念

2018-09-16
阅读 2 分钟
11.6k
该系列完整的文章目录: 在介绍本章的主题之前,我们先来看几个问题: 问题一 写C/C++的同学应该经常遇到这样的一个Error: {代码...} 在遇到这样的问题时你知道这背后到底哪里出问题了吗? 你通常都能顺利解决类似问题吗? 问题二 作为世界上最大的同性交友网站GitHub,里面有很多很棒的项目,一般我们或者直接下载其发...