进程与线程的一个简单解释
进程与线程的一个简单解释作者: 阮一峰
日期: 2013 年 4 月 24 日
进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。
最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。
1.
计算机的核心是 CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。
2.
假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个 CPU 一次只能运行一个任务。
3.
进程就好比工厂的车间,它代表 CPU 所能处理的单个任务。任一时刻,CPU 总是运行一个进程,其他进程处于非运行状态。
4.
一个车间里,可以有很多工人。他们协同完成一个任务。
5.
线程就好比车间里的工人。一个进程可以包括多个线程。
6.
车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。这象征一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。
7.
可是,每间房间的大小不同,有些房间最多只能容纳一个人,比如厕所。里面有人的时候,其他人就不能进去了。这代表一个线 ...
TCP 协议简介
TCP 协议简介作者: 阮一峰
日期: 2017 年 6 月 8 日
TCP 是互联网核心协议之一,本文介绍它的基础知识。
一、TCP 协议的作用互联网由一整套协议构成。TCP 只是其中的一层,有着自己的分工。
(图片说明:TCP 是以太网协议和 IP 协议的上层协议,也是应用层协议的下层协议。)
最底层的以太网协议(Ethernet)规定了电子信号如何组成数据包(packet),解决了子网内部的点对点通信。
(图片说明:以太网协议解决了局域网的点对点通信。)
但是,以太网协议不能解决多个局域网如何互通,这由 IP 协议解决。
(图片说明:IP 协议可以连接多个局域网。)
IP 协议定义了一套自己的地址规则,称为 IP 地址。它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息。
(图片说明:路由器就是基于 IP 协议。局域网之间要靠路由器连接。)
路由的原理很简单。市场上所有的路由器,背后都有很多网口,要接入多根网线。路由器内部有一张路由表,规定了 A 段 IP 地址走出口一,B 段地址走出口二,……通过这套”指路牌”,实现了数据包的转发。
( ...
汇编语言入门教程
汇编语言入门教程作者: 阮一峰
日期: 2018 年 1 月 21 日
学习编程其实就是学高级语言,即那些为人类设计的计算机语言。
但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机实际的运行步骤。
计算机真正能够理解的是低级语言,它专门用来控制硬件。汇编语言就是低级语言,直接描述/控制 CPU 的运行。如果你想了解 CPU 到底干了些什么,以及代码的运行步骤,就一定要学习汇编语言。
汇编语言不容易学习,就连简明扼要的介绍都很难找到。下面我尝试写一篇最好懂的汇编语言教程,解释 CPU 如何执行代码。
一、汇编语言是什么?我们知道,CPU 只负责计算,本身不具备智能。你输入一条指令(instruction),它就运行一次,然后停下来,等待下一条指令。
这些指令都是二进制的,称为操作码(opcode),比如加法指令就是00000011。编译器的作用,就是将高级语言写好的程序,翻译成一条条操作码。
对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔的编辑需求,就诞生了汇编语言。
汇编语言是二进制 ...
markdown学习笔记1
markdown学习笔记11、markdown是什么?
Markdown是一种轻量级标记语言,2004 由约翰·格鲁伯(英语:John Gruber)创建,通过使用易读易写的纯文本格式编写文档,让作者把更多精力放在文章内容,不再为排版浪费时间。Markdown文档可以导出为HTML、Word、图像、PDF、Epub 等多种格式。
2、标题、换行、字体标题
使用 # 号可表示 1-6 级标题,一级标题对应一个 # 号,二级标题对应两个 # 号,以此类推。
一级标题二级标题三级标题四级标题五级标题六级标题
换行
段落的换行是使用两个以上空格再加上回车。
或者使用一个空行来表示新的段落段落。
字体
* 斜体文本 \*粗体文本*****粗斜体文本***
斜体文本粗体文本粗斜体文本
3、分割线、删除线、下划线分割线
在一行中用三个以上的星号、减号、底线来建立一个分隔线
-—分割线
分割线
删除线
在文字的两端加上两个波浪线表示删除线
~~删除线~~
删除线
下划线
通过 HTML 的 \ \标签来表示下划线
\ 下划线 \
下划线
4 ...
vim中可视模式下添加或取消多行注释
vim中可视模式下多行添加注释和取消注释正常模式 —> 可视模式:
指令
描述
v
可视模式
ctrl+v
可视块模式
shift+v
可视行模式
可视块模式有一个非常实用的作用:选多行进行注释
多行添加注释:- 光标置于行首- ctrl + v,进入可视块模式- 移动光标,选中的位置会有高亮显示- shift + i,进入 insert 模式- 输入//- esc
多行取消注释:- 光标置于行首- ctrl + v,进入可视块模式- 移动光标,选中的位置会有高亮显示- 按d
查看gcc的宏定义
1、查看gcc默认的内置宏定义1gcc -dM -E - < /dev/null
或者
1gcc -dM -E helloworld.c
helloworld.c为用户随意编写的c测试用例,随意拿个c程序就行。
-E 预处理后即停止,不进行编译。预处理后的代码送往标准输出。GCC忽略任何不需要预处理的输入文件。
-dM 告诉预处理器输出有效的宏定义列表(预处理结束时仍然有效的宏定义)。该选项需结合`-E’选项使用。
2、打开用户自行设置的宏定义1gcc -DDEBUG helloworld.c
helloworld.c文件中的宏定义DEBUG如下:
12345#ifdef DEBUG printf("DEBUG is defined ! ");#else printf("DEBUG is not defined ! ");#endif
总结:gcc内部默认的宏定义+用户自行设置的宏定义=所有的宏定义
学习笔记1:单片机最小系统设计
1、单片机概念单片机:一种集成电路芯片,是单片微型计算机的简称。单片机由微处理器CPU、存储器ROM和RAM、输入输出IO接口电路组成,构成了一个既小巧又完善的计算机硬件系统。
2、单片机用途(1)智能仪器仪表,如示波器、万用表
(2)机电一体化产品,如机器人、数控机床、打印机
(3)实时工业控制,如电机转速控制
(4)家用电器,如冰箱、洗衣机
3、单片机应用系统单片机应用系统=软件+硬件(单片机+接口电路及外部设备)
单片机应用系统是以单片机为核心,配以输入、输出、显示、控制等外围电路和相应的控制、驱动软件,能完成一种或多种功能的使用系统。
4、MCS-51系列单片机组成结构(1)中央处理器-CPU:8位数据宽度,能同时处理8位二进制数据或代码。
(2)数据存储器-RAM:8051单片机有128B数据存储器和21个专用寄存器,用户能使用的只有128B,专用寄存器通常用于存放控制指令数据,不能存放用户数据。
(3)程序存储器-ROM:8051单片机有4KB程序存储器,掉电后数据不会丢失。
(4)定时/计数器:8051单片机有2个16位的可编程定时/计数器。
(5)并行I/O口:8051 ...
在无锡必去的一些地标打卡点
灵山大佛
鼋头渚
惠山
南长街、清明桥、古运河
蠡湖公园
梅园
蠡湖
太湖
梅里古都
Ubuntu下Shadowsocks配置指南
Ubuntu下Shadowsocks安装及优化前言本教程旨在提供简明的Ubuntu 16.04下安装服务器端Shadowsocks。不同于Ubuntu 16.04之前的教程,本文抛弃initd,转而使用Ubuntu 16.04支持的Systemd管理Shadowsocks的启动与停止,显得更为便捷。优化部分包括BBR、TCP Fast Open以及吞吐量优化。
本教程仅适用于Ubuntu 16.04及之后的版本,基于Python 3,支持IPv6。
安装pip本教程使用Python 3为载体,因Python 3对应的包管理器pip3并未预装,首先安装pip3:
1sudo apt install python3-pip
安装Shadowsocks因Shadowsocks作者不再维护pip中的Shadowsocks(定格在了2.8.2),我们使用下面的命令来安装最新版的Shadowsocks:
1pip3 install https://github.com/shadowsocks/shadowsocks/archive/master.zip
安装完成后可以使用下面这个命令查看Shado ...
markdown介绍和使用说明
陈树义
广州唯品会信息科技有限公司 Java开发工程师
854 人赞同了该文章
写博客、写文章比较多的人都知道 Markdown 是什么。
Markdown 是一种轻量级标记语言,创始人为 John Gruber。它允许人们「使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者 HTML)文档」。——维基百科
简单地说,Markdown 与 HTML 语言一样,使用一些符号就代替样式。但是它比 HTML 语言更加简单。例如我想要实现标题样式,那么我可以这么做:
Markdown的本质有些朋友会觉得,我用 Word 也可以实现同样的效果,为什么要使用 Markdown 呢?这个问题提得非常好,直戳问题本质。
Word 等其他文本编辑工具虽然也能实现同样的效果,但是其功能太强大了。Word 还能改变字体颜色,还可以调节字体大小。这么强大的功能可以说是 Word 的优点,但也可以说是它的缺点。
当功能多了,我们的注意力就会分散,我们就会去纠结:这个字体大小到底是 14 还是 16 好?我想强调这一句话,是要加粗还是标红?
而 Markdown 的出现让我们不需要去纠结 ...




