创建线程: /************************************************************************* > File Name: 1.cpp > Author: 朱紫钰 > Mail: zhuziyu1157817544@gmail.com > Created Time: 2017年12月19日 星期二 13时32分14秒 ************************************************************************/ #include<iostream> #include <thread> using namespace std; void fun() { cout << "This is thread of " << this_thread::get_id()<< 继续阅读 >>


朱紫钰 17/12/19 14:19:45
socket.c文件 所有我自己的注释理解都是汉字,绝大部分前面都有zzy,是为了和原来作者的注释区分开 /* $Id: socket.c 1.1 1995/01/01 07:11:14 cthuang Exp $ * * This module has been modified by Radim Kolar for OS/2 emx */ /*********************************************************************** module: socket.c program: popclient SCCS ID: @(#)socket.c 1.5 4/1/94 programmer: Virginia Tech Computing Center compiler: DEC RISC C compiler (Ultrix 4.1) environment: 继续阅读 >>


朱紫钰 17/12/17 14:26:54
getopt和getopt_long函数 1.介绍getopt int getopt(int argc, char * const argv[], const char *optstring); getopt函数的前两个参数,就是main函数的argc和argv,这两者直接传入即可,要考虑的就只剩下第三个参数。 optstring的格式举例说明比较方便,例如: char *optstring = “abcd:”; 上面这个optstring在传入之后,getopt函数将依次检查命令行是否指定了 -a, -b, -c及 -d(这需要多次调用getopt函数,直到其返回-1),c才能检查完所有你输入的参数。因为每次检查一个参数,当检查到上面某一个参数被指定时,函数会返回被指定的参数名称(即该字母) 最后一个参数d后面带有冒号,代表可以加指定的参数,如 -d 10086 optind表示的是下一个将被处理到的参数在argv中的下标值。 如果指定opt 继续阅读 >>


朱紫钰 17/12/16 21:35:56
定位: 基于http,ftp协议的多线程下载工具,支持断点续传。 axel github代码:axel ubuntu16.04下载: apt-get install axel 使用方法: 1.man axel 2.axel -h axel -o target url 改目标文件名称 axel -s xx url 指定最大下载速度 axel -n x url 指定最大连接数 axel -N url 不使用代理服务器 axel -V 查看版本 axel -q url 不把信息输出到stdout axel -a url 显示不同的线程的进度和状态,和当前的速度并且显示剩余时间 axel -h 显示参数的大概信息 axel -v 一些状态信息 我想实现一个基于http协议的多线程断点续传工具。 目前先考虑多线程。 我的实现思路: 在此之前,需要一些http 继续阅读 >>


朱紫钰 17/08/15 16:24:14
今天在某乎看到的有关同步异步阻塞非阻塞的例子,很形象。 老张烧水。名词:老张,会响的水壶,不会响的水壶。 同步阻塞:老张用不会响的水壶烧水,得在旁边看者,什么也干不了。水沸腾倒暖壶以后才能走。 同步非阻塞:老张时不时去看看水有没有开,没有开的话,回客厅看电视(相当于做另一件事情)。 异步阻塞:老张在水旁边等着,什么也不能干,也不看着水,,等水壶响了通知他倒热水。 异步非阻塞:老张等水壶响了去倒水,其余时间在客厅看电视(做了另一件事情),不去厨房盯着水。 同步异步,是指的水壶本身,水壶会不会烧好水后通知老张。 阻塞费=非阻塞:是老张的行为到底是什么也不干,还是看电视(干别的)。 作者:zhuziyu1157817544 发表于 2017/08/04 21:28:55 原文链接 https://blog.csdn.net/zhuziyu1157817544/article/details/76691899 继续阅读 >>


朱紫钰 17/08/04 21:28:55
先看我的测试结果: 最最low的服务器: 功能:监听新用户    监听注册描述符的EPOLLIN和EPOLLOUT。    触发EPOLLIN的话,打印缓冲区    触发EPOLLOUT,发送固定字符串 代码: /************************************************************************* > File Name: 1.cpp > Author: 朱紫钰 > Mail: zhuziyu1157817544@gmail.com > Created Time: 2017年08月01日 星期二 12时54分24秒 ************************************************************************/ #include<iostream> #include<sys/types.h> 继续阅读 >>


朱紫钰 17/08/04 17:53:30
http状态码 定义:HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码 分类: 1xx: 作为临时的响应,代表请求已经被受理,服务器用来向客户端指定客户端应该有的后续动作。 2xx:请求成功,服务器已经接受并且会处理它 3xx:这类状态码代表需要客户端采取进一步的操作才能完成请求。用于重定向。后续的请求地址(重定向目标)在本次响应的 Location 域中指明。这个我在腾讯云上抓包看见过。但是自己没包装过相关的http包。 4xx:客户端出错,返回大概的可能的出错原因。 5xx:服务器出错,返回出错的原因。 6xx:源站没有返回响应头部,只返回实体内容(这句话是百度的,留个点,日后说不定能遇见这个码) 具体的http码: http码 解释 100 客户端仍应该继续发送剩余请求,所有请求完成后,服务器会给客户端最终响应 101 提醒客户端按照服务器发来的信息改变请求方式 200 继续阅读 >>


朱紫钰 17/08/04 15:48:01
回顾select: 下面的事件支持selece可读: 1.socket内核接收缓存区中的字节数大于或等于其低水位标记SO_RCVLOWAT(0x1004)。我们可以无阻塞地读取该socket,并且读操作返回字节数为0。 2.socket通信的对方关闭连接。此时对该socket的读操作将返回0。 3.监听socket上有新的连接请求。 4.socket上有未处理的错误。此时我们可以使用getsockopt来读取和清除错误。 下面的事件支持select可写: 1.socket内核发送缓存区中的字节数大于或等于其低水位标记SO_SNDLOWAT ( 0x1003) 。我们可以无阻塞写该socket,并且写操作返回字节数大于0。 2.socket写操作被关闭。对写操作被关闭的socket执行之写操作将触发SIGPIPE信号,这个信号默认程序退出。 3.socket使用非阻塞connet连接成功或者失败之后触发写操作。 4.socket上有为处理的错误,我们用getsockopt读取和清除该 继续阅读 >>


朱紫钰 17/06/03 11:19:04
这两种都是高效的并发模式。 半同步半异步模式: 出现原因: 异步线程执行效率高,但是编写复杂,同步线程效率低,但是逻辑简单。服务器要求好的实时性和同时处理多用户的请求,英雌采用两者结合的形式。 具体情况: 过程: 异步线程见听到客户请求后,将其封装成请求对象插入请求队列,请求队列将通过通知某个工作在同步模式下的工作线程来读取并处理该请求对象。具体选择哪一个工作线程来服务这个客户请求,取决于请求队列的设计。 变体:半同步半反应堆模式 图: 解释:异步线程只有一个,由主线程充当,负责监听所有socket事件。如果监听socket上有可读事件发生,指的是新的链接请求到来,那么异步线程接受它,往epoll内核事件表中注册该socket上的读写事件。如果连接socket上有读写事件发生,要么是新的客户请求,要么时有数据要发送给客户端,主线程就把改连接socket插入请求队列。所有的工作线程睡眠在请求队列上,有任务来的时候,空闲线程竞争,获取任务接管权。 也就是说,该模式的主线程只管理监 继续阅读 >>


朱紫钰 17/05/18 18:54:10
1.先解释同步和异步: 同步异步是一种通信机制。 同步:调用方需要保持等待直到I/O操作完成。 异步:调用方可以不用保持等待,只需要操作系统完成I/O操作通知调用方就可以了。 2.再说说阻塞和非阻塞: 阻塞非阻塞是一种调用机制。 阻塞:调用方等待I/O操作完成后才返回,就是阻塞的。 非阻塞:调用方不需要等待IO操作完成就立即返回。非阻塞的情况下,常常需要多次调用去check,才能获得IO操作的结果。 3. 2*2的比较 同步阻塞 调用者发起I/O操作请求,等待I/O操作完成再返回。 同步非阻塞 调用者发起I/O操作请求,询问I/O操作的状态,如果未完成,则立即返回,该调用者不断主动询问操作系统是否完成I/O操作;如果完成,则返回结果. 异步阻塞 调用者发起I/O操作请求,等待I/O操作完成再返回。I/O操作的过程不需要等待,操作完成后通过通知或回调获得结果。 异步非阻塞 调用者发起I/O操作请求,询问I/O操作的状态,如果未完成,则立即返回;如果完成,则返回结果。I/O操作的过程不需要等待, 继续阅读 >>


朱紫钰 17/05/17 14:42:29