相关分享
errno 的实现
本文从 errno 这个看似普通的错误码接口切入,解释了为什么它不能简单地作为全局变量存在,以及 POSIX 从“外部变量”转向“可修改左值宏”背后的线程安全需求。
文章进一步拆解了 FreeBSD 的具体实现:errno 被定义为对 __error() 返回指针的解引用,单线程场景下回到全局存储,多线程场景下则由 libthr 通过构造函数、函数指针切换和弱符号介入,把访问路径切换到线程私有的错误码存储。这个过程展示了 C 运行时在 ABI 兼容、性能开销和线程语义之间的权衡。
对于系统编程、C 运行库、POSIX 线程模型或 FreeBSD 实现机制感兴趣的读者,这是一篇信息密度较高的源码解读。它能帮助读者理解一个常用宏背后隐藏的运行时设计,也适合作为分析 libc 与线程库协作机制的入门案例。
Go协程池深度解析:原理、实现与最佳实践
文章系统解析 Go 协程池的实现原理和实践,包括为何需要协程池、基本实现方式、协程数设置依据及性能对比测试。示例代码演示如何手动构建协程池,并推荐三种高性能第三方库(如 ants、tunny)。适合进行高并发控制和资源管理优化的场景。
合成控制法的原理和扩展实现
本文介绍了合成控制法(Synthetic Control Method,SCM)原理及其扩展:首先通过选择多个未受干预单位并加权构建一个“合成对照组”,以模拟受干预单位在无干预情况下的表现;然后详细推导了权重 W 与协变量权重矩阵 V 的嵌套最优化过程;最后介绍了“合并损失函数 + 正则化(Lasso/ElasticNet)”的扩展方案,以增强模型稳健性。适用于政策或市场活动影响评估。
WebSocket协议详解与c++&c#实现 - 知然
这篇文章详细介绍了 WebSocket 协议的工作原理,包括握手过程、数据帧格式以及如何在 C++ 和 C# 中实现 WebSocket 通信。作者提供了一个轻量级的 WebSocket 解析库,特点是仅包含一个头文件、逻辑清晰且不依赖特定的网络接口,方便集成。此外,文章还提供了一个在线的 WebSocket 模拟客户端,便于测试和理解 WebSocket 的通信过程。
适合人群:对网络编程感兴趣的开发者,尤其是使用 C++ 或 C# 进行服务器开发,并希望深入理解 WebSocket 协议及其实现的工程师。
时隔两年,Chrome也支持round等CSS数学函数了
本文介绍了CSS中的数学函数 `round()` 的新应用,它能实现多种取整方式,如上舍、下舍、四舍五入等,用于提升样式的精确控制。特别是在字体大小、动画步阶和响应式设计中,`round()` 可防止小数值带来的渲染偏差,使界面更一致。这一函数现已在Chrome中支持,为开发者提供了更灵活的布局工具。
Android|使用阿里云推流 SDK 实现双路推流不同画面
想知道如何在 Android 中通过阿里云 SDK 实现双路推流不同画面?本文介绍了一个巧妙的解决方案,虽然阿里云 SDK 不支持原生多路推流,但通过跨进程调用,实现了同时推送不同区域的画面,适用于直播和录播场景的分离展示。开发者不容错过的实战分享,赶快阅读!
让AI 实现一个红黑树
文章探讨了使用AI帮助实现红黑树数据结构的过程。作者尝试使用多种AI工具模拟专家(如Rob Pike)实现红黑树,并进行了代码优化、单元测试和Fuzz测试。过程中发现AI生成的代码存在问题,但通过不断调整和AI协作,最终实现了功能完善的红黑树实现。文章强调AI在代码生成、测试和优化方面的潜力与不足。
如何用简单的Web方法实现图片的马赛克效果
文章介绍了如何通过简单的Web技术实现图片的马赛克效果。作者主要讨论了使用SVG滤镜来实现此效果,尤其是通过使用像<feFlood>、<feComposite>和<feMorphology>等SVG元素。此外,文章还探讨了通过CSS属性image-rendering: pixelated来模拟马赛克效果的方法,即通过放大小图片来达到效果。文中提供了详细的示例和代码片段来帮助实现这些效果。
Agent是如何工作的:概念及LangChain实现
LLM(大型语言模型)在自主Agent领域的应用受到了广泛关注。你可能已经在诸如Auto-GPT、BabyAGI等流行应用中了解过它们的用法,这些应用几乎每天都层出不穷。
理解这些应用的基本原理并不复杂,因为大多数工具的工作流程大致相同。
以非阻塞方式执行一个函数
用过 skynet 的应该都碰到过:当我们在服务中不小心调用了一个长时间运行而不返回的 C 函数,会独占一个工作线程。同时,这个被阻塞的服务也无法处理新的消息。一旦这种情况发生,看似是无解的。我们通常认为,是设计问题导致了这种情况发生。skynet 的框架在监测到这种情况发生时,会输出 maybe in an endless loop 。
如果是 Lua 函数产生的死循环,可以通过发送 signal 打断正在运行运行的 Lua 虚拟机,但如果是陷入 C 函数中,只能事后追查 bug 了。
那么,如果我原本就预期一段 C 代码会运行很长时间,有没有可能从底层支持以非阻塞方式运行这段代码呢?即,在这段代码运行期间,该服务还可以接收并处理新的消息?
