编辑
2025-09-24
NodeJs
00

在 Node.js 中,global 是一个非常重要的概念,允许我们在整个应用程序中访问一些全局变量和函数。global 对象在 Node.js 中类似于浏览器环境中的 window 对象。本文将深入探讨 global 对象,并通过多个示例来展示其常用的功能和使用场景。

Global 全局对象概述

global 对象在 Node.js 中是全局可访问的,这意味着你可以在任何模块或函数中直接使用它,而无需显式地导入或声明。以下是一些常见的全局对象和函数:

  • console
  • process
  • setTimeout / clearTimeout
  • setInterval / clearInterval
  • Buffer
  • __dirname
  • __filename
  • module
  • require
编辑
2025-09-24
NodeJs
00

Node.js 是一个强大的 JavaScript 运行时,广泛用于服务器端开发。而 npm(Node Package Manager)是 Node.js 的包管理工具,方便我们安装、管理和发布依赖包和模块。在这篇文章中,我们将详细介绍 npm 和 package.json,并结合多个例子帮助你更好地理解和使用它们。

npm 简介

npm 是随同 Node.js 一起安装的包管理工具,它可以帮助你安装、共享、分发代码,并管理项目的依赖。

  • 安装和更新依赖: npm 可以自动帮助你安装或更新项目所需的依赖包。
  • 版本管理: 管理不同版本的依赖包,以确保项目的稳定。
  • 发布和分享: 你可以将自己的模块发布到 npm 注册表中,供其他开发者使用。

如何安装 npm

安装 Node.js 时会自动安装 npm。你可以在命令行中输入以下命令来验证是否安装成功:

Bash
$ node -v $ npm -v

如果需要更新 npm,你可以使用以下命令:

Bash
$ npm install -g npm

npm 常用命令

以下是一些常用的 npm 命令:

  • 初始化项目: npm init
  • 安装依赖: npm install <package-name>
  • 全局安装: npm install -g <package-name>
  • 卸载依赖: npm uninstall <package-name>
  • 更新依赖: npm update <package-name>
  • 查看依赖信息: npm info <package-name>

package.json 详解

编辑
2025-09-24
C#
00

👋 你是否在实际项目中遇到过这样的困扰:一次性处理大集合,内存飙升、接口超时、日志刷屏?尤其是批量写库、调用第三方API、分片发送消息时,一个「全量 for 循环」就可能把系统拖垮。今天这篇文章,我们用一个简单却强大的工具——.NET 6 引入的 Enumerable.Chunk 方法,深入讲透「如何用最少代码实现高效、稳健的分批处理」。读完你将掌握 3-5 种在生产环境可直接落地的 C#开发 实战方案与编程技巧。

🧩 问题分析:为什么你需要分批处理?

在 C#开发 的日常业务里,以下痛点非常常见:

  • 数据量大:一次性处理上万条记录,占用大量内存,GC 压力大,延迟升高。
  • 外部依赖脆弱:数据库/外部API通常有限流或超时限制,大批量请求易失败。
  • 可观测性差:失败重试定位困难,出错要么全错要么难以复现。
  • 事务成本高:一次性事务跨度太大,锁时间长,阻塞其他业务。

分批处理(Chunking)能带来的价值:

  • 控制单次负载,提升吞吐与稳定性;
  • 更友好的失败重试与补偿策略;
  • 更清晰的监控与日志切分;
  • 代码更简洁,业务语义更明确。
编辑
2025-09-24
C#
00

摘要

创建线程的昂贵的操作,为每一个短暂的异步操作创建线程会产生显著的开销。所以需要使用Pooling技术。

线程池其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。 线程池非常适合大量小的运算。

正文

  • 保持线程中的操作都是非常短暂的。不要再线程池中放入长时间运行的操作,或者阻塞工作线程。
  • 请注意线程池中的工作线程都是后台线程。这意味着当所有的前台线程(包括主程序线程)完成后,所有的后台线程将停止工作。

通常是将计算密集型的操作放在worker线程池中运行,而线程池的大小会根据当前的CPU使用量自动调整,通过下面两个方法,我们可以设置线程池的大小:

ThreadPool.SetMaxThreads(10, 200);

ThreadPool.SetMinThreads(2, 40);

两个参数分别是WorkThread和IO thread的限制。

编辑
2025-09-24
C#
00

摘要

在C#中,线程同步是一种机制,用于控制多个线程访问共享资源的顺序,以避免数据竞争和不一致性问题。C#提供了多种线程同步技术,包括但不限于锁(lock)、监视器(Monitor)、信号量(Semaphore)、事件(EventWaitHandle、AutoResetEvent、ManualResetEvent)和互斥体(Mutex)。

正文

AutoResetEvent

AutoResetEvent是.net线程简易同步方法中的一种。AutoResetEvent 常常被用来在两个线程之间进行信号发送

两个线程共享相同的AutoResetEvent对象,线程1可以通过调用AutoResetEvent对象的WaitOne()方法进入等待状态,然后另外一个线程2通过调用AutoResetEvent对象的Set()方法取消等待的状态。

AutoResetEvent如何工作的

在内存中保持着一个bool值,如果bool值为False,则使线程阻塞,反之,如果bool值为True,则使线程退出阻塞。当我们创建AutoResetEvent对象的实例时,我们在函数构造中传递默认的bool值,以下是实例化AutoResetEvent的例子。

WaitOne 方法

该方法阻止当前线程继续执行,并使线程进入等待状态以获取其他线程发送的信号。WaitOne将当前线程置于一个休眠的线程状态。WaitOne方法收到信号后将返回True,否则将返回False。