原创 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可以使一定數量的線程反覆地在柵