原创 Golang日誌框架lumberjack包源碼分析
github地址: https://github.com/natefinch/lumberjack 獲取源碼 go get gopkg.in/natefinch/lumberjack.v2 介紹 lumberjac
原创 Golang sync.WaitGroup源碼詳細分析
一、介紹 WaitGroup是多個goroutine之間協作的一種實現方式,主要功能就是阻塞等待一組goroutine執行完成。 常用的使用場景:主goroutine調用Add函數設置需要等待的goroutine的數量,當每個goro
原创 git提示error setting certificate verify locations錯誤解決
git version 2.14.2 git 提示 error setting certificate verify locations 錯誤 一般是因爲沒有找到ssl證書位置導致的 兩種方法解決: 1. 重新配置證書的位置 wi
原创 Golang sync.Pool詳解
Golang中sync.Pool用來提高對象複用機率,減少gc的壓力,減少內存分配,它是線程安全的,常用來存儲並複用臨時對象。 原理 爲了減小併發中鎖的競爭,sync.pool爲每個P(對象cpu線程)分配一個子池子poolLocal,每
原创 Golang zap框架應用(三)—— 按時間段存儲日誌
功能實現 1.將error以下級別添加到info.log文件中 2.將error及以上添加到error.log文件中 4.將日誌寫入到kafka服務中 4.按指定時間段記錄日誌 下載: go get -u go.uber.org/zap
原创 Linux根據進程名稱獲取pid的方法
以下通過兩種方法來根據進程名稱獲取pid 方法一 最簡單的方法是使用 pidof 命令 用法:pidof process_name 示例 官網的詳細用法如下: NAME pidof -- find the pr
原创 CentOS 7 安裝Kafka
由於Kafka依賴Zookeeper,而Zookeeper需要java環境,故需要先安裝jdk 一、安裝JDK (以下爲jdk8的下載地址) https://www.oracle.com/technetwork/java/javase/d
原创 Kafka Client源碼中的NIO使用
本源碼使用的Kafka Client是0.10.0.1 NetworkClient是一個通用的網絡客戶端實現,Kafka生產者和消費者都使用NetworkClient組件和服務端Broker之間進行通訊。 public class Ne
原创 Reactor示例
Reactor模型相關內容可參考:https://blog.csdn.net/skh2015java/article/details/106721630 Reactor模型示例 mainSelector 負責處理ACCEPT I/O事件
原创 Java NIO之Channel詳細理解
介紹 理解:通道是一個連接I/O服務的管道並提供與該服務交互的方法。 Channel類似於傳統的”流”,但是Channel不能直接訪問數據,需要和緩衝區Buffer進行交互。 通道和傳統流的區別: 1. 通道可以是雙向的,既可以讀取數
原创 Java NIO之Selector詳細理解
介紹 Selector一般稱爲選擇器。它是Java NIO核心組件之一,選擇器管理着一個被註冊的通道集合的信息和它們的就緒狀態。通道是和選擇器一起被註冊的,並且使用選擇器來更新通道的就緒狀態。 可選擇通道
原创 Java NIO之Buffer詳細理解
Buffer簡介 Buffer:是一個指定特定數據類型的容器,主要用於和Channel進行數據交互。在多線程操作下 Buffer 是不安全的。 在Java NIO中使用的核心緩衝區如下(覆蓋了通過I/O發送的基本數據類型:byte,
原创 Java CountDownLatch 使用
使用 Java的concurrent包裏面的CountDownLatch是一個非常實用的多線程控制工具類,其實可以把它看作一個計數器,只不過這個計數器的操作是原子操作,同時只能有一個線程去操作這個計數器,也就是同時只能有一個線程去減這個
原创 Java Semaphore使用
使用 Semaphore:信號量,用於控制多個線程訪問資源 void acquire() throws InterruptedException 嘗試獲取一個准入的許可。如果無法獲得,則線程等待,直到獲取許可或者當前線程被中斷
原创 Java CyclicBarrier使用
使用說明 柵欄類似於閉鎖,它能阻塞一組線程直到某個事件的發生。柵欄與閉鎖的關鍵區別在於,所有的線程必須同時到達柵欄位置,才能繼續執行。閉鎖用於等待事件,而柵欄用於等待其他線程。 CyclicBarrier可以使一定數量的線程反覆地在柵