点分十进制:linux
检索并打印一个DNS条目git
本机回送地址程序员
多个域名映射为同一个IP地址web
多个域名映射到多个IP地址编程
函数级并发——线程安全
三种基本的构造并发程序的方法:服务器
进程:每一个逻辑控制流是一个进程,由内核进行调度,进程有独立的虚拟地址空间网络
I/O多路复用:逻辑流被模型化为状态机,全部流共享同一个地址空间并发
线程:运行在单一进程上下文中的逻辑流,由内核进行调度,共享同一个虚拟地址空间函数
须要注意的事情:
父进程须要关闭它的已链接描述符的拷贝(子进程也须要关闭)
必需要包括一个SIGCHLD处理程序来回收僵死子进程的资源
父子进程之间共享文件表,可是不共享用户地址空间
独立地址空间的优势是防止虚拟存储器被错误覆盖,缺点是开销高,共享状态信息才须要IPC机制
select函数处理类型为fd_set的集合,即描述符集合,并在逻辑上描述为一个大小为n的位向量,每一位b[k]对应描述符k,但当且仅当b[k]=1,描述符k才代表是描述符集合的一个元素。
描述符能作的三件事: 一、分配他们 二、将一个此种类型的变量赋值给另外一个变量 三、用FDZERO、FDSET、FDCLR和FDISSET宏指令来修改和检查它们
一个状态机就是一组状态、输入事件和转移,其中转移就是将状态和输入事件映射到状态。
基于I/O多路复用的并发事件驱动服务器的流程以下:
当n=2时,状态比较简单,是比较熟悉的二维坐标图,横纵坐标各表明一个线程,而转换被表示为有向边
转换规则:
一个程序的执行历史被模型化为状态空间中的一条轨迹线。
线程循环代码的分解:
几个概念:
pthread_creat:建立线程,若成功则返回0,若失败则返回出错编号。第一个参数为指向线程标识符的指针,建立成功时指向的内存单元被设置为新建立线程的线程ID;第二个参数设置线程属性;第三个参数是线程运行函数的起始地址;最后一个参数是运行函数的参数
pthread_join:用来等待一个线程的结束。当函数返回时,被等待线程的资源被收回。
pthreadmutexlock:线程调用该函数让互斥锁上锁。成功锁定时返回0,其余任何返回值都表示出现了错误。
pthreadmutexunlock:与pthreadmutexlock成对存在。释放互斥锁。
每次运行的结果都不同。是由于随机的覆盖吗?
主函数中用srand(time(NULL))设置当前的时间值为种子,在后面的producer和consumer函数中调用rand()函数产生随机数。
• mmap函数
void* mmap(void* start,sizet length,int prot,int flags,int fd,offt offset);
将一个文件或者其余对象映射进内存。文件被映射到多个页上,若是文件的大小不是全部页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中做用很大。 - 成功执行时,mmap()返回被映射区的指针,munmap()返回0.失败时,mmap()返回MAP_FAILED,munmap返回-1.
•offt lseek(int fd,offt offset,int whence);
lseek主要做用是移动文件读写指针,返回文件读写指针距文件开头的字节大小,若出错则返回-1.
运行以下
seminit(sem_t *sem, int pshared, umsigned int value);
semdestroy()函数用于销毁由sem指向的匿名信号量。只有经过seminit()初始化的信号量才应该使用该函数销毁。函数成功时返回0,错误时返回-1,并把errno设置为合适的值。
这个函数和以前的condvar.c同样都是展现生产者和消费者交替工做的过程。区别是本程序实现生产或消费的过程是利用semwait()和sempost(),它们的做用分别是从信号量的值减去一个“1”和从信号量的值加上一个“1”
本周在学习完教材上的内容后,我把老师给的代码逐一进行实践,在运行代码的过程当中,因为程序中调用的一些函数都是比较生疏的,须要一个一个的去理解其中每一个参数的含义和函数的返回值,因此整个过程耗费了我大量的时间,不过收获仍是很大的。最初看代码的时候,只能根据程序运行的结果来大体的猜想每一句代码的含义,不过在结合课本的知识后,对其又有了进一步的深入体会。
不知不觉已经上了娄老师两个学期的课了,从最开始彻底排斥反抗这种教学模式,到最后将这些学习方式变为本身的习惯。我如今静静一想,才明白娄老师的良苦用心。 以写博客的方式来记录本身的学习过程,不只锻炼了文笔还理清了思绪,说得长远一点,实际上是在积累本身的人生财富!不必定只有学计算机相关知识,才能发博客,看完一本书的感想或者记录平时的心情,博客园都是一个很好的平台。平时有什么问题也能够在园子里提问,博客园里面藏龙卧虎! 咱们还要学会使用git托管,虽然最开始在下载方面或者使用方面比较麻烦,但万事开头难,一旦上手,受益不浅!好比之后电脑出现“数据流失”的话,就不用惧怕了。再好比几我的要作项目的话,学会git共享代码,也会省事儿不少!学会用Markdown来编写文档,实际上是强调了一种规范意识! 有的人也许会说,我之后要当公务员,跟程序员没半毛钱关系。 这句话是极其愚昧的,或者说这个同窗没有领会到娄老师教学的精髓,娄老师一直强调的是什么,不是要咱们学多少知识,由于知识是学不完的,也是会忘记的,娄老师要的是咱们培养一种学习方法,培养一种学习习惯,培养一种思惟方式,这才是会伴随咱们一辈子的财富~
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/2 | 20/20 | |
第二周 | 58/58 | 1/3 | 20/40 | |
第三周 | 150/208 | 1/4 | 22/62 | |
第五周 | 150/358 | 1/5 | 21/83 | |
第六周 | 136/494 | 1/6 | 25/108 | |
第七周 | 115/609 | 2/8 | 24/132 | |
第八周 | 0/609 | 2/10 | 22/154 | |
第九周 | 109/718 | 3/13 | 20/174 | |
第十周 | 472/1190 | 1/14 | 21/195 | |
第十一周 |
1883/3073 | 3/17 | 21/216 | |
第十二周 | 0/3073 | 2/19 | 20/236 | |
第十三周 | 1023/4096 | 1/20 | 21/257 |