我们在使用 go 编写代码的时候,在错误处理的时候,经常会写出很多 if err != nil ,其实有些时候我们可以使用一些技巧去避免,本文就来讨论两种常见的避免技巧,内部包装错误和 errgroup。...
Lynis 是Unix/Linux等操作系统的一款安全审计工具,它可以发现基于Linux系统中的恶意软件和安全漏洞。Lynis是免费开源的服务器审计工具,一旦审计完成,我们可以审查结果、警告和建议,然后我们可以根据它实现我们的安全策略...
命名的 scheme 体现了我们希望系统通过命名来得到什么功能。(addressing, indirection, etc)
在没有新消息进入的时候,receiver 应该放弃共享缓冲区的锁,然后进入睡眠等待 sender 唤醒。 然而上述代码的问题在于,「放弃缓冲区锁」和「进入睡眠」不是一步原子操作,而是独立的两步操作。...
它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别...
生产者负责生成商品,消费者负责消费商品,生产不能过剩(仍有数据未被消费时不能生产),消费不能没有(不能消费还没有生产的数据)
最近在实现两个需求,由于两者之间并没有依赖关系,所以想利用队列进行解耦;但在 Go 的标准库中并没有现成可用并且并发安全的数据结构;但 Go 提供了一个更加优雅的解决方案,那就是 channel。...
用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而方便的实现进程互斥与进程同步
较长一段时间以来我都发现不少开发者对 jdk 中的 J.U.C(java.util.concurrent)也就是 Java 并发包的使用甚少,更别谈对它的理解了;但这却也是我们进阶的必备关卡。...
Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)。