首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

GuavaCache学习笔记三:底层源码阅读

3.refreshAfterWrite 指明每个数据实体:当 创建 或 写 之后的 固定值的有效期到达时,数据会被自动刷新(注意不是删除是异步刷新,不会阻塞读取,先返回旧值,异步重载到数据返回后复写新值...,时间=Thu May 17 17:55:38 CST 2018--》38秒时,启动3个线程模拟并发读:三个线程读缓存,由于缓存不存在,阻塞在get方法上,等待其中一个线程去同步load数据 Thread...,即40秒时写入数据:load-2 Thread-0并发读缓存=load-2,时间=Thu May 17 17:55:40 CST 2018---线程1同步载入数据load()完毕后,3个阻塞在get方法的线程得到缓存值...:40:01 CST 2018--》01秒,2秒后距离上次写超过1秒,reload异步重载 2秒后,缓存是否存在=张三--》距离上一次写过了2秒,但是会立即返回缓存 Thread-0...begin,时间...main休眠5秒后,读缓存=reload-5,时间=Thu May 17 18:40:06 CST 2018--》06秒时,reload异步重载,立即返回旧值reload-5 main距离上一次读0.5

1K20

等待子进程的那些事儿

总结一下,使用 SIGCHLD 信号适合异步等待子进程的场景,并且通常搭配 wait 来回收子进程。 单独使用 wait 函数族的场景 典型代码如下: 1 #include ".....(WNOHANG); wait 函数族可被信号中断,此时返回 -1,errno 设置为 EINTR,必要时需要重启 wait; 总结一下,使用 wait 函数族适合同步等待子进程,例如某种命令执行器进程...混合使用同步 wait 与异步 wait 函数族的场景 其实前面已经提到 SIGCHLD 要搭配 wait 使用,但那是异步使用 wait 的单一场景,而这里讲的混合,是指同时在信号处理器与执行流程中使用...好了,事情至此就全明了了,对于混合使用同步与异步 wait 的应用来说,最佳的方法应该是同步 waitpid 等待前台进程,使用sigaction 注册 SIGCHLD 信号处理器异步等待后台进程,且不设置...= NULL) { 54 if (fputs (line, fpout) == EOF) 55 err_sys ("fputs error to pipe");

2.4K30

select()函数详解

2、select函数   该函数准许进程指示内核等待多个事件中的任何一个发送,并只在有一个或多个事件发生或经历一段指定的时间后才唤醒。...writeset,fd_set *exceptset,const struct timeval *timeout) 返回值:就绪描述符的数目,超时返回0,出错返回-1 函数参数介绍如下: (1)第一个参数...为此,把该参数设置为空指针NULL。 (2)等待一段固定时间:在有一个描述字准备好I/O时返回,但是不超过由该参数所指向的timeval结构中指定的秒数和微秒数。...(3)根本不等待:检查描述字后立即返回,这称为轮询。为此,该参数必须指向一个timeval结构,而且其中的定时器值必须为0。...n = read(sockfd,recvline,MAXLINE); 54 if (n == 0) 55 { 56

1.7K20
领券