Skip to main content

Posts

Showing posts from 2022

Explaining the 'find -mtime' command

  The POSIX specification for find says: -mtime n The primary shall evaluate as true if the file modification time subtracted from the initialization time, divided by 86400 (with any remainder discarded), is n . Interestingly, the description of find does not further specify 'initialization time'. It is probably, though, the time when find is initialized (run). In the descriptions, wherever n is used as a primary argument, it shall be interpreted as a decimal integer optionally preceded by a plus ( '+' ) or minus-sign ( '-' ) sign, as follows: +n More than n .    n Exactly n . -n Less than n . Transferring the content of a comment to this answer. You can write -mtime 6 or -mtime -6 or -mtime +6 : Using 6 without sign means "equal to 6 days old — so modified between 'now - 6 * 86400' and 'now - 7 * 86400'" (because fractional days are discarded). Using -6 means "l

唐伯虎点秋香 国语 高清

SREcon15 - Notes from Production Engineering

要想得到你所需的薪资和期望的工作,你必须富有创造力和灵活性

生活中有个简单的事实,即若想实现最理想的人生,既要有足够的财富来满足所需,还要有一份能给予自己成就感的工作——要实现这些目标,你首先要满足他人所需。这就是现实运作的模式,即你给予他人其所需,从而获得报酬,你的所得进而会帮你得到你想要的。如何把这件事做好是在你努力过上理想生活的过程中最大的难题之一。虽然这看起来很困难,但是当你被迫地去面对它时,你不仅会变得更强大,也会对社会做出更大的贡献,这对于人类社会能向好的方向不断进化来说是至关重要的。 如果你不能很好地解决这个难题,你就会被迫在两个选项中做出选择,一是从事你不喜欢的工作来获取你所需要的薪酬,二是做你热爱却不能支撑你生活所需的工作。这就是为什么我鼓励你们做到“将热爱的事与工作合二为一”(同时拥有两者),以及我想补充的“在一份能支付足够的薪酬来满足自己所需的工作中实现”。我尤其担心的是1) 那些一心只想追求热爱的事,却对自己人生中间这一阶段需要怎样的经济基础毫无头绪的年轻人,而这一阶段需要花的钱比他们想象的要多得多;2) 一些年纪稍长的人,他们已经习惯于当前的赚钱方式,却忽视了自己能去热爱的所有可能的事,从而去实现最理想的生活。 在思考如何同时拥有足够的财富和工作成就感的时候,我希望你能富有创造力和灵活性,同时,我也建议你去《原则》书里阅读关于以下两点的原则:1) 如何最大化地兼顾两个你认为互不相容的事情;2) 总会有一条最好的前进之路,只是你还没有发现它,而你要如何努力去找到它。显而易见,最容易的途径就是你热爱的事情如果做好了就能让你赚取足够财富的,当你热爱的事情越难让你获得理想的报酬,这个问题就会越难解决。比方说,你对创作诗歌感兴趣,但是仅靠创作诗歌来赚钱可能很难维持你的生活,因此你首先要考虑有没有其它你所热爱的事情是可以获取理想报酬的。在权衡你热爱的事情和获得理想报酬两者时不要太狭隘,你要聪明一点并做出适当妥协。你越聪明,做出的妥协就越少。举例来说,我认识一个对艺术创作很感兴趣的人,他希望在这个领域有所建树,例如说想成为一名画家。但是由于他需要金钱去支撑他和家庭的开支,而卖他的画并不能做到这一点,因此与其以这种方式坚持他的爱好,他明智地以另一种他喜爱也能获得很好收入的形式(成为一名商业艺术家)继续追求艺术创作这个爱好,这让他精神和经济上的需求都得以满足,同时在业余时间继续以自己喜欢的风格去创作。我发现,大部分人

深入学习IO多路复用 select/poll/epoll 实现原理

  select/poll/epoll 是 Linux 服务器提供的三种处理高并发网络请求的 IO 多路复用技术,是个老生常谈又不容易弄清楚其底层原理的知识点,本文打算深入学习下其实现机制。 Linux 服务器处理网络请求有三种机制,select、poll、epoll,本文打算深入学习下其实现原理。 吃水不忘挖井人,最近两周花了些时间学习了张彦飞大佬的文章 图解 | 深入揭秘 epoll 是如何实现 IO 多路复用的 和 其他文章 ,及出版的书籍《深入理解 Linux 网络》,对阻塞 IO、多路复用、epoll 等的实现原理有了一定的了解;飞哥的文章描述底层源码逻辑比较清晰,就是有时候归纳总结事情本质的抽象程度不够,涉及内核源码细节的讲述较多,会让读者产生一定的学习成本,本文希望在这方面改进一下。 0. 结论 本文其他的内容主要是得出了下面几个结论: 服务器要接收客户端的数据,要建立 socket 内核结构,主要包含两个重要的数据结构, (进程)等待队列 ,和 (数据)接收队列 ,socket 在进程中作为一个文件,可以用文件描述符 fd 来表示,为了方便理解,本文中, socket 内核对象 ≈ fd 文件描述符 ≈ TCP 连接; 阻塞 IO 的主要逻辑是:服务端和客户端建立了连接 socket 后,服务端的用户进程通过 recv 函数接收数据时,如果数据没有到达,则当前的用户进程的进程描述符和回调函数会封装到一个进程等待项中,加入到 socket 的进程等待队列中;如果连接上有数据到达网卡,由网卡将数据通过 DMA 控制器拷贝到内核内存的 RingBuffer 中,并向 CPU 发出硬中断,然后,CPU 向内核中断进程 ksoftirqd 发出软中断信号,内核中断进程 ksoftirqd 将内核内存的 RingBuffer 中的数据根据数据报文的 IP 和端口号,将其拷贝到对应 socket 的数据接收队列中,然后通过 socket 的进程等待队列中的回调函数,唤醒要处理该数据的用户进程; 阻塞 IO 的问题是:一次数据到达会进行 两次进程切换, 一次数据读取有 两处阻塞,单进程对单连接; 非阻塞 IO 模型解决了“ 两次进程切换,两处阻塞,单进程对单连接 ”中的“ 两处阻塞 ”问题,将“ 两处阻塞 ”变成了“ 一处阻塞 ”,但依然存在“