随笔分类 -  进程.线程.事件.通信.内核对象.线程绑核

摘要:只能在uv_close之后的uv_cb中对handle内存进行释放。 因为uv_close本身只是将handle代释放队列,倘若释放时遇到某些异步处理(如:uv_write)需要失败回调通知,将会继续调用对应的回调,此时再访问handle和可能因内存访问coredump。 void TcpHandl 阅读全文
posted @ 2021-11-18 22:56 dzqabc 阅读(218) 评论(0) 推荐(0) 编辑
摘要:shm_open() allows multiple un-related processes to access the same shared memory - since it can be accessed by a well know name.shmget() requires some 阅读全文
posted @ 2021-11-18 17:00 dzqabc 阅读(1319) 评论(0) 推荐(0) 编辑
摘要:libuv 采用了 异步 (asynchronous), 事件驱动 (event-driven)的编程风格, 其主要任务是为开人员提供了一套事件循环和基于I/O(或其他活动)通知的回调函数, libuv 提供了一套核心的工具集, 例如定时器, 非阻塞网络编程的支持, 异步访问文件系统, 子进程以及其 阅读全文
posted @ 2021-09-01 09:20 dzqabc 阅读(217) 评论(0) 推荐(0) 编辑
摘要:libuv的三种运行模式: UV_RUN_DEFAULT: 默认轮询模式,此模式会一直运行事件循环直到没有活跃句柄、引用句柄、和请求句柄 UV_RUN_ONCE:一次轮询模式,处理一个事件。 UV_RUN_NOWAIT:一次轮询模式,最多处理一个事件。uv_run(loop, UV_RUN_NOWA 阅读全文
posted @ 2021-09-01 09:05 dzqabc 阅读(991) 评论(0) 推荐(0) 编辑
摘要:用户态:Ring3 运行于用户态的代码则要受到处理器的诸多检查,它们只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址,且只能对任务状态段(TSS )中I/O 许可位图(I/O Permission Bitmap )中规定的可访问端口进行直接访问 。 内核态:Ring0在处理器的存 阅读全文
posted @ 2021-06-15 18:59 dzqabc 阅读(255) 评论(0) 推荐(0) 编辑
摘要:转自:https://blog.csdn.net/freeelinux/article/details/53782986 本文转自多个博客,以及最后有我的总结。我没有单独从头到尾写一个总结的原因是别人已经写得很好了,我不花大量时间是无法达到这水平的。 一:Linux虚拟地址空间布局 (转自:Linu 阅读全文
posted @ 2019-08-26 23:26 dzqabc 阅读(9705) 评论(0) 推荐(2) 编辑
摘要:转载目的主要了解fork原理,实际fork的使用越来越少,原因也可以通过本文了解。 实际在当前的多线程情况下,fork已经基本无太多可取之处了。 fork的设计之出应该就是为了更方便地使用多进程程序,提高并发性。 然而对于多个并发需要共享大量数据时,多线程拥有的内部通信往往比较高效,而fork只实现 阅读全文
posted @ 2017-11-22 23:34 dzqabc 阅读(591) 评论(0) 推荐(1) 编辑
摘要:信号(Signals)信号是一种软中断,是一种处理异步事件的方法。一般来说,操作系统都支持许多信号。尤其是UNIX,比较重要应用程序一般都会处理信号。UNIX定义了许 多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改变... 阅读全文
posted @ 2015-08-23 16:03 dzqabc 阅读(1795) 评论(0) 推荐(0) 编辑
摘要:(读写锁优先级 写饥饿): 对一个同享的数据布局,读的频率远弘远于写,所以用了读写锁.但是发现写线程老是抢不到锁. 按The Open Group 的Single UNIX? Specification所说,"Thepthread_rwlock_rdlock() function applies a 阅读全文
posted @ 2015-08-23 15:55 dzqabc 阅读(5757) 评论(0) 推荐(0) 编辑
摘要:通过下面发现磁盘满的情况下write调用阻塞业务线程执行testwrite.cpp (1.37KB)发送成功 #include <stdio.h>#include <stdlib.h>#include <iostream>#include <time.h>#include <map>#include 阅读全文
posted @ 2015-08-23 15:41 dzqabc 阅读(121) 评论(0) 推荐(0) 编辑
摘要:1.linux查看修改线程默认栈空间大小 ulimit -s a、通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M b、通过命令 ulimit -s 设置大小值 临时改变栈空间大小:ulimit -s 102400, 即修改为100M c、可以在/et 阅读全文
posted @ 2014-12-03 23:08 dzqabc 阅读(52627) 评论(0) 推荐(0) 编辑
摘要:这是微软介绍The Interlocked API的部分,不过里面讲到了原子操作的问题,虽然应该只是针对微软操作系统,不过我倒是觉得所有操作系统应该是一致的。对CPU位数相同或低于CPU位数且字节对齐的一个数值操作,应该可以完成赋值取值操作,赋值后该数一定为要赋的值,取值后取到的也一定是该值被赋的一个值,都不会出现中间值。所以最终觉得32位整数,倘若保证只有一个线程会写值,其他线程读值,是不可能会出错的。倘若多线程读写,不过倘若多线程只是用它作为一个bool值,且通过bool值通知而已,又不在乎多线程相应,我觉得这样用也不应没有什么不可以的。Interlocked Variable Acces 阅读全文
posted @ 2013-03-31 22:58 dzqabc 阅读(1489) 评论(0) 推荐(0) 编辑
摘要:在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等.但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等),直到父进程通过wait / waitpid来取时才释放,此时该进程便成为僵尸进程。1.什么是僵尸进程? UNIX 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,而父进程还没有结束,那么他将变成一个僵尸进程. 如果该进程的父进程已. 阅读全文
posted @ 2012-07-12 23:21 dzqabc 阅读(592) 评论(0) 推荐(0) 编辑
摘要:为什么要有TLS?原因在于,进程中的全局变量与函数内定义的静态(static)变 量,是各个线程都可以访问的共享变量。在一个线程修改的内存内容,对所有线程都生效。这是一个优点也是一个缺点。说它是优点,线程的数据交换变得非常快 捷。说它是缺点,一个线程死掉了,其它线程也性命不保; 多个线程访问共享数据,需要昂贵的同步开销,也容易造成同步相关的BUG。 如果需要在一个线程内部的各个函数调用都能访问、但其它线程不能访问的变量(被称为static memory local to a thread 线程局部静态变量),就需要新的机制来实现。这就是TLS。 线程局部存储在不同的平台有不同的实现,可移植.. 阅读全文
posted @ 2012-05-13 22:41 dzqabc 阅读(1600) 评论(0) 推荐(0) 编辑
摘要:1. 相关函数 #include <pthread.h> pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(pthread_cond_t *cond); int pthread_cond_wait(pthread_cond_t *cond, 阅读全文
posted @ 2012-05-13 22:27 dzqabc 阅读(409) 评论(0) 推荐(0) 编辑
摘要:条件变量函数操作相关函数说明初始化条件变量pthread_cond_init 语法基于条件变量阻塞pthread_cond_wait 语法解除阻塞特定线程pthread_cond_signal 语法在指定的时间之前阻塞pthread_cond_timedwait 语法在指定的时间间隔内阻塞pthread_cond_reltimedwait_np 语法解除阻塞所有线程pthread_cond_broadcast 语法销毁条件变量状态pthread_cond_destroy 语法初始化条件变量使用 pthread_cond_init(3C) 可以将 cv 所指示的条件变量初始化为其缺省值,或者指定 阅读全文
posted @ 2012-05-02 07:54 dzqabc 阅读(5077) 评论(0) 推荐(2) 编辑
摘要:按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开销。 一.基础知识:线程和进程 按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开销。 无... 阅读全文
posted @ 2012-02-16 22:40 dzqabc 阅读(598) 评论(0) 推荐(0) 编辑
摘要:函数简介 函数pthread_join用来等待一个线程的结束。函数原型为: extern int pthread_join (pthread_t__th, void **__thread_return); 第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止... 阅读全文
posted @ 2012-02-16 22:25 dzqabc 阅读(777) 评论(0) 推荐(1) 编辑
摘要:头文件 #include <pthread.h> 函数原型 pthread_t pthread_self(void); 函数作用:获得线程自身的ID。pthread_t的类型为unsigned long int,所以在打印的时候要使用%lu方式,否则将产生奇怪的结果。 功能 获取当前调用线程的 thread identifier(标识号). 阅读全文
posted @ 2012-02-16 22:11 dzqabc 阅读(2102) 评论(1) 推荐(0) 编辑
摘要:函数简介pthread_create是UNIX环境创建线程函数头文件#include函数声明int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),... 阅读全文
posted @ 2012-02-16 21:57 dzqabc 阅读(517) 评论(0) 推荐(1) 编辑