自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

昭君出塞的专栏

行动是治愈恐惧的良药。而犹豫、拖延将不断滋养恐惧。

  • 博客(114)
  • 资源 (2)
  • 收藏
  • 关注

原创 程序员十五年内职业生涯规划,共勉之

很多人以为技术人员可以做一直做下去,但是最近我发现这个观点不完全正确,因为能一直做下去的技术人员非常稀少,因为不同的年龄段,公司对技术人员的要求会不一样,如最近传言华为计划裁掉40岁以上的程序员,首先我认为肯定不会裁掉所有40岁以上的技术人员,如CTO或高级技术专家不会被开,因为他们达到了40岁技术人员应该达到的能力,而那些没有达到该年龄段能力的技术人员会被淘汰。为什么现在各大公司招技术人员这...

2018-10-28 23:00:34 866

原创 HTTP中的Host字段

我们知道Http请求头信息里面会带有一个Host字段,很多人不是很清楚这个字段具体的作用或者用法,包括我被很多人问过也曾经有些迷茫,这里具体扫盲下。我们知道一个IP地址可以对应多个域名,比如假设我有这么几个域名www.qiniu.com,www.taobao.com和www.jd.com然后在域名提供商那通过A记录或者CNAME记录的方式最终都和我的虚拟机服务器IP 111.111.111.1...

2018-10-11 14:46:41 53207 7

转载 唯快不破:TCP/IP网络编程的四书五经

[本文发表于《程序员》杂志2003年第12期,作者孟岩]        TCP/IP协议是当前广域网和局域网通用的网络协议,因此,基于TCP/IP的编程就格外重要。从应用上来说,现在直接利用C层次Socket API进行TCP/IP编程的人确实越来越少了,各种现成的框架(如ACE、Java、.NET FCL)和控件(如IP*Works)大大简化了TCP/IP编程的难度。但是,如果想要在

2018-01-04 10:45:42 445

转载 唯快不破:线程同步--递归锁 非递归锁

一、简介1.1 进程/线程同步方法      常见的进程/线程同步方法有互斥锁(或称互斥量Mutex)、读写锁(rdlock)、条件变量(cond)、信号量(Semophore)等。      在windows系统中,临界区(Critical Section)和事件对象(Event)也是常用的同步方法。1.2 递归锁/非递归锁      Mutex可以分为递

2018-01-03 16:38:43 448

转载 唯快不破:linux进程间通信(IPC)--共享内存

从表面上看,UNIX® 应用程序单独控制底层主机。它随时可以访问处理器,它的内存是神圣不可侵犯的,连接它的设备只为它服务。但是表面现象会骗人,这样有如君主一般的绝对地位只是幻想而已。UNIX 系统同时运行大量应用程序,有限的物理资源要在它们之间共享。处理器能力被划分为时间片,应用程序映像经常被换入和换出真实内存,设备访问由需求驱动,还受到访问权限的限制。尽管您的 shell 提示符不断闪烁,但是

2018-01-03 15:23:55 365

转载 唯快不破:线程同步、条件变量、互斥锁的使用

线程间的同步技术,主要以互斥锁和条件变量为主,条件变量和互斥所的配合使用可以很好的处理对于条件等待的线程间的同步问题。举个例子:当有两个变量x,y需要在多线程间同步并且学要根据他们之间的大小比较来启动不同的线程执行顺序,这便用到了条件变量这一技术。看代码[cpp] view plain copy"font-family:'KaiTi_GB23

2018-01-03 11:58:11 255

转载 唯快不破:线程间同步--互斥锁、条件变量、信号量

一、互斥锁(mutex)在上一篇文章中讲到的互斥锁,说的是在多线程之间为了保持同步而使用的。但是什么是线程同步呢,为了保持线程同步都可以采用什么策略?多个线程同时访问共享数据时可能会冲突,这跟前面讲信号时所说的可重入性是同样的问题。比如两个线程都要把某个全局变量增加1,这个操作在某平台需要三条指令完成:从内存读变量值到寄存器寄存器的值加1

2018-01-03 10:06:50 421

转载 唯快不破:【多线程】使用信号量进行同步

信号量是最早出现的用来解决进程同步与互斥问题的机制(也可实现进程通信),包括一个称为信号量的变量及对它进行的两个原语操作。信号量为一个整数,我们设这个信号量为:sem。很显然,我们规定在sem大于等于零的时候代表可供并发进程使用的资源实体数,sem小于零的时候,表示正在等待使用临界区的进程的个数。根据这个原则,在给信号量附初值的时候,我们显然就要设初值大于零。p操作和v操作是不可中断的程序

2018-01-02 19:23:30 534

转载 唯快不破:linux下 fork(),vfork(),clone()的用法及区别

fork,vfork,clone都是linux的系统调用,用来创建子进程的(确切说vfork创造出来的是线程)。先介绍下进程必须的4要点:a.要有一段程序供该进程运行,就像一场戏剧要有一个剧本一样。该程序是可以被多个进程共享的,多场戏剧用一个剧本一样。b.有起码的私有财产,就是进程专用的系统堆栈空间。c.有“户口”,既操作系统所说的进程控制块,在li

2018-01-02 17:16:30 236

转载 唯快不破:信号量 互斥锁 条件变量的区别(讲的很好,值得收藏)

信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在哪里)。而互斥锁是用在多线程多任务互斥的,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源。比如对全局变量的访问,有时要加锁,操作完了,在解锁。有的时候锁和信号量会同时使用的”也就是说,信号量不一定

2018-01-02 13:28:10 267

转载 唯快不破:多线程与多进程的区别(4)

很想写点关于多进程和多线程的东西,我确实很爱他们。但是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手。今天终于下了决心,写点东西,以后可以再修修补补也无妨。 一.为何需要多进程(或者多线程),为何需要并发?这个问题或许本身都不是个问题。但是对于没有接触过多进程编程的朋友来说,他们确实无法感受到并发的魅力以及必要性。我想,只要你不是整天都写那种

2017-12-29 14:25:24 293

转载 唯快不破:read/write 阻塞/非阻塞

read函数从打开的设备或文件中读取数据。#include ssize_t read(int fd, void *buf, size_t count);返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0参数count是请求读取的字节数,读上来的数据保存在缓冲区buf中,同时文件的当前读写位置向后移。注意这个读写位置

2017-12-29 08:58:38 1635

转载 唯快不破:I/O多路复用之select总结

1、基本概念  IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:  (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。  (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。  (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用

2017-12-28 09:32:08 262

转载 唯快不破:TCP发送数据流程详解

B/S通信简述整个计算机网络的实现体现为协议的实现,TCP/IP协议是Internet的核心协议,HTTP协议是比TCP更高层次的应用层协议。HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。浏览器(Web

2017-12-27 17:37:08 8424

转载 唯快不破:开源网络库的分析libevent muduo nginx

每一个开源项目存在都有它的道理和意义,不同的思想有不同的优缺点。      libevent:这是一个用纯C写的开源库,属于一个轻量级的网络中间件。其中用到的基本数据结构也是非常巧妙。展现反应堆模型的基本使用方法。不同的事件对应不容的处理方法。I/O 定时 信号。三种事件的处理单独分开,又通过事件驱动融合在一起。       专栏地址:http://blog.csdn.net/co

2017-12-26 21:00:17 2135

转载 唯快不破:linux网络编程--TCP/IP网络编程中socket的行为

熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉:1. TCP/IP协议(如连接的建立和终止、重传和确认、滑动窗口和拥塞控制等等)2. Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为。3. 编写Performant, Scalable的服务器程序。包括多线程、IO Multiplexing、

2017-12-26 11:04:23 213

转载 唯快不破:linux网络编程--TCP分包 粘包 MTU 和MSS之间的关系分析

其实在以前的文章中介绍了和这个话题相关的文章,TCP封包。这里还想继续回顾想以前的内容,把不明白的东西弄明白:        IP分片在以太网上,由于电气限制,一帧不能超过1518字节,除去以太网帧头14字节(mac地址等)和帧尾4字节校验,还剩1500字节,这个大小称为MTU(最大传输单元)。如果你的IP包大于1500字节,IP层就会分片了。而1492的MTU值的来源

2017-12-26 09:24:44 435

转载 唯快不破:高性能网络编程中的几个基本概念

阻塞(blocking)和非阻塞(non-blocking):阻塞和非阻塞是指用户进程在做read(), write()等系统调用的时候,根据系统调用当前所处的状态而采取的不同的处理策略。拿read()函数来说,阻塞情况下,如果没有数据到达,则用户进 程一直等待(睡眠),直到数据到达,这个过程中用户进程处于睡眠状态,干不了其他事情;非阻塞情况下,如果数据没有到达,则立即返回给用户进程一个状态信息(

2017-12-25 13:11:35 223

转载 唯快不破:浅谈TCP/IP网络编程中socket的行为 数据的美妙旅程

我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉:1. TCP/IP协议(如连接的建立和终止、重传和确认、滑动窗口和拥塞控制等等)2. Socket I/O系统调用(重点如read/write),这是TCP/IP协议在应用层表现出来的行为。3. 编写Performant, Scalable的服务器程序。包括多线程、IO Multiplex

2017-12-25 10:37:28 221

转载 唯快不破:深入浅出TCP/IP中的send和recv

先明确一个概念:每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的滑动窗口便是依赖于这两个独立的buffer以及此buffer的填充状态。接收缓冲区把数据缓存入内核,应用进程一直没有调用read进行读取的话,此数据会一直缓存在相应 socket的接收缓冲区内。再啰嗦一点,不管进程是否读取socket,对端发来的数据都会经由内核接收并且缓存到

2017-12-25 09:37:36 461

转载 唯快不破:再次深入理解TCP网络编程中的send和recv

本篇我们用一个测试机上的阻塞socket实例来说明主题。文章中所有图都是在测试系统上现截取的。需要理解的3个概念1. TCP socket的buffer每个TCP socket在内核中都有一个发送缓冲区和一个接收缓冲区,TCP的全双工的工作模式以及TCP的流量(拥塞)控制便是依赖于这两个独立的buffer以及buffer的填充状态。接收缓冲区把数据缓存入内核,应用进程一直没有调用r

2017-12-19 14:37:55 280

转载 唯快不破:TCP/IP详解--发送ACK和RST的场景

在有以下几种情景,TCP会把ack包发出去:1.收到1个包,启动200ms定时器,等到200ms的定时器到点了(第二个包没来),于是对这个包的确认ack被发送。这叫做“延迟发送”;2.收到1个包,启动200ms定时器,200ms定时器还没到,第二个数据包又来了(两个数据包一个ack);3.收到1个包,启动200ms定时器,还没超时,正好要给对方发点内容。于是对这个包的确认ack就跟着捎

2017-12-18 20:12:27 573

转载 唯快不破:UNIX网络编程--TCP网络编程中的listen

int listen(int fd, int backlog); 有几个概念需要在开头澄清一下TCP socket分两种,监听socket和传输socket两种监听socket:负责处理网络上来的连接请求(客户端的syn包到达便是连接请求来了,如果不知道syn包,请参看一下TCP三次握手);传输socket:负责在网络上的两个端点之间传输TCP数据。未决socket:p

2017-12-18 19:08:45 187

转载 唯快不破:TCP/IP中的SO_REUSEADDR和SO_KEEPALIVE

SO_REUSEADDR 据《UNIX网络编程》卷一所说,此选项用于4种用途我本人在TCP服务器上只处理过两种,其他情况如有需要,请参考《UNIX网络编程》卷一1.引自《UNIX网络编程》卷一多进程绑定同一对IP和PORT,按时序举个多进程模式tcp服务器的例子a.父进程进行监听; b.来syn包,请求连接; c.派生子进程处理用户长连接请求; d.父进程挂掉;

2017-12-16 10:20:09 327

转载 唯快不破:Linux网络编程中socket常见错误分析

socket错误码:EINTR: 4阻塞的操作被取消阻塞的调用打断。如设置了发送接收超时,就会遇到这种错误。只能针对阻塞模式的socket。读,写阻塞的socket时,-1返回,错误号为INTR。另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。如果recv的返回值为0,那表明连接已经断开,接收操作也应该结束。

2017-12-16 10:18:26 805

转载 唯快不破:TCP之性能优化避免慢启动

TCP协议中有个慢启动,在《TCP/IP详解卷一》中占据的篇幅很小,但是这个东西,在某些业务场景下,对性能的影响非常大。什么是慢启动 最初的TCP的实现方式是,在连接建立成功后便会向网络中发送大尺寸的数据包,假如网络出现问题,很多这样的大包会积攒在路由器上,很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此现在的TCP协议规定了,新建立的连接不能够一开始就发送大尺寸的数据包,而只能

2017-12-16 10:17:11 298

转载 唯快不破:I/O之内核buffer-“buffer cache”

"buffercache" 要理解"buffercache"这个东西,需要澄清一下概念:一般情况下,进程在io的时候,要依赖于内核中的一个buffer模块来和外存发生数据交换行为。另一个角度来说,数据从应用进程自己的buffer流动到外存,中间要先拷贝到内核的buffer中,然后再由内核决定什么时候把这些载有数据的内核buffer写出到外存。"buffer cache"仅仅被内核用于常

2017-12-16 10:16:05 257

转载 唯快不破:linux 中IO多路复用epoll函数的ET和LT工作模式详解

epoll的优点:1.支持一个进程打开大数目的socket描述符(FD)select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降,二是可以选择多进程的解决方案(传统的 Apache方案),不

2017-12-15 09:03:24 564

转载 唯快不破:TCP/IP详解--TCP中异常关闭连接的意义 异常关闭的情况

一、异常关闭连接的意义终止一个连接的正常方式是发送FIN。在发送缓冲区中所有排队数据都已发送之后才发送FIN,正常情况下没有任何数据丢失。但我们有时也有可能发送一个RST报文段而不是FIN来中途关闭一个连接。这称为异常关闭。进程关闭socket的默认方式是正常关闭,如果需要异常关闭,利用SO_LINGER选项来控制。异常关闭一个连接对应用程序来说有两个优点:(1)丢弃任

2017-12-15 09:02:02 961 5

转载 唯快不破:UNIX网络编程--服务器的几种异常终止

1、在accept函数返回前连接夭折这种情况发生在TCP 3次握手刚好完成,服务器TCP将连接放入到已经建立好连接队列中,此时客户端给一个RST,接下来accept返回,不过这时accept返回的是ECONNECTABORT错误.这不是一个致命错误。2、服务器进程终止过程如下:a、kill掉服务进程,作为进程善后处理的部分,所有打开的文件描述符被关闭,这导致服务端TCP

2017-12-14 12:59:07 211

转载 唯快不破:socket 可读 可写 条件

一、下列四个条件中的任何一个满足时,socket准备好读: 1.socket接收缓冲区中已经接收的数据的字节数大于等于socket接收缓冲区低潮限度的当前值;对这样的socket的读操作不会阻塞,并返回一个大于0的值(即:准备好读入的数据的字节数).我们可以用socket选项SO_RCVLOWAT来设置此低潮限度,对于TCP和UDPsocket,其缺省值为1; 2.连接的读这一半关闭(即:

2017-12-14 09:11:52 412

转载 唯快不破:结合内核实现源码分析 select poll epoll区别

在博客中以前的文章有介绍epoll的使用方法,但是并没有详细介绍之间的区别http://blog.csdn.net/yusiguyuan/article/details/15027821http://blog.csdn.net/yusiguyuan/article/details/15029465http://blog.csdn.net/yusiguyuan/article/detai

2017-12-14 09:10:42 119

转载 唯快不破:linux守护进程的详解与创建

写在前面,守护进程与后台进程的区别:后台进程:默认情况下,进程是在前台运行的,但是在运行的时候使用特殊操作使前台运行的程序放置后台运行,但是如果这个进程所依附的shell终结,就是在后台运行的程序也会被终止。守护进程:类似于一种服务,在开机启动的时候会自动启动,或者通过程序写一个守护进程,下面有讲解关于后台进程的书写规范;还可以通过命令来启动一个后太进程。即使所有的shell都关闭,后台进

2017-12-13 13:05:44 192

转载 唯快不破:UNIX网络编程--非阻塞connect的实现

一、《UNIX网络编程》-非阻塞connect在一个TCP套接口被设置为非阻塞之后调用connect,connect会立即返回EINPROGRESS错误,表示连接操作正在进行中,但是仍未完成;同时TCP的三路握手操作继续进行;在这之后,我们可以调用select来检查这个链接是否建立成功;非阻塞connect有三种用途:1.我们可以在三路握手的同时做一些其它的处理.connect操作

2017-12-12 21:26:27 378

转载 唯快不破:TCP网络编程--非阻塞accept和非阻塞connect

非阻塞accept当一个已完成的连接准备好被accept的时候,select会把监听socket标记为可读。因此,如果用select等待外来的连接时,应该不需要把监听socket设置为非阻塞模式,因为如果select告诉我们连接已经就绪,accept就不应该被阻塞。不过这样做的时候有一个BUG:当客户端在跟服务器建立连接之后发送了一个RST包,这个时候accept就会阻塞,直到有下一个已完成的

2017-12-12 20:06:00 560

转载 唯快不破:高性能网络服务器5--IO复用与并发模型

对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同TCP连接上的报文,与此同时,可能服务器上还有数以十万计的最近几秒没有收发任何报文的相对不活跃连接。同时处理多个并行发生事件的连接,简称为并发;同时处理万计、十万计的连接,则是高并发。服务器的并发编程所追求的就是处理的并发连接数目无限大,同时维持着高效率使用CPU等资源,直至物理资源首先耗尽。并

2017-12-08 09:03:37 212

转载 唯快不破:高性能网络服务器4---TCP连接的关闭

TCP连接的关闭有两个方法close和shutdown,这篇文章将尽量精简的说明它们分别做了些什么。为方便阅读,我们可以带着以下5个问题来阅读本文:1、当socket被多进程或者多线程共享时,关闭连接时有何区别?2、关连接时,若连接上有来自对端的还未处理的消息,会怎么处理?3、关连接时,若连接上有本进程待发送却未来得及发送出的消息,又会怎么处理?4、so_linger这个功能的

2017-12-07 14:53:38 237

转载 唯快不破:高性能网络服务器3--TCP消息的接收

这篇文章将试图说明应用程序如何接收网络上发送过来的TCP消息流,由于篇幅所限,暂时忽略ACK报文的回复和接收窗口的滑动。为了快速掌握本文所要表达的思想,我们可以带着以下问题阅读:1、应用程序调用read、recv等方法时,socket套接字可以设置为阻塞或者非阻塞,这两种方式是如何工作的?2、若socket为默认的阻塞套接字,此时recv方法传入的len参数,是表示必须超时(SO_RC

2017-12-06 17:43:17 266

转载 唯快不破:高性能网络服务器2--TCP消息的发送

在高性能网络编程--accept建立连接中,我们已经建立好的TCP连接,对应着操作系统分配的1个套接字。操作TCP协议发送数据时,面对的是数据流。通常调用诸如send或者write方法来发送数据到另一台主机,那么,调用这样的方法时,在操作系统内核中发生了什么事情呢?我们带着以下3个问题来细细分析:发送方法成功返回时,能保证TCP另一端的主机接收到吗?能保证数据已经发送到网络上了吗?套接字为阻塞或者

2017-12-05 11:49:09 188

转载 唯快不破:高性能网络服务器1--accept建立连接

最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它。编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点、希望应用代码完全不关心通讯细节。他们更喜欢在OO世界里,去实现某个接口、实现这个组件预定义的各种模式、设置组件参数来达到目

2017-12-04 15:00:23 239

贪吃蛇java版

写贪吃蛇的可以参考一下,里面有相应的源代码和生成的jar文件

2012-09-15

HTML标签总结

HTML是学做网页制作的先决条件,此文档就是为我们学网页开发的人准备的

2012-05-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除