リアルタイムチャットシステムの実装

リアルタイム通信の仕組みと設計 リアルタイム通信とは、あるクライアントが送信したメッセージを、他のすべての接続中のクライアントが即座に受信できる仕組みです。従来のモデルではクライアントからのデータはサーバーにのみ届く形でしたが、リアルタイム通信では、サーバーが受信したメッセージを他のすべてのオンラインクライアントに配信する必要があります。 この ...

9月18日 17:30 投稿

Pythonにおける並行処理とスレッドの基礎

現代のコンピュータープログラムにおいて、複数のタスクを同時に実行する「並行処理」は、アプリケーションの応答性を高め、リソースを効率的に活用するために不可欠です。Pythonでは、この並行処理を実現するための主要な手段として「スレッド」が用いられます。 プロセスとスレッドの違い 並行処理を理解する上で、まず「プロセス」と「スレッド」の違いを明確にするこ ...

8月25日 22:17 投稿

ReentrantLockの内部原理とAQSの詳細解説

JUCにおけるAQSの構造 AQS(AbstractQueuedSynchronizer)は同期器であり、JUCの基礎ツールクラスです。ReentrantLockのロック取得はAQSを使用するため、まずAQSの全体構造を解説します。具体的な操作手法はReentrantLockの解説で説明します。 AQSのデータ構造 // AQSキュー先頭ノード private transient volatile Node head; // AQSキュー末尾ノード private transient ...

8月13日 08:13 投稿

Javaにおけるマルチスレッドプログラミング基礎

プロセスとスレッドの概念 プロセスとスレッドは並行処理の基本単位です。例えば動画再生アプリケーションでは、アプリ起動がプロセスに対応し、映像処理、音声再生、コメント表示などの各機能が個別のスレッドで実行されます。プロセスは実行中のプログラムでシステムリソース割当の基本単位、スレッドはCPUスケジューリングの基本単位です。 重要な特性 スレッドは ...

7月20日 16:44 投稿

Linuxでの読み書きロックの使い方

読み書きロックの概要 読み書きロックはミューテックスの進化版で、読込ロックを取得した場合、複数スレッドが並列/並行で読み込み操作を実行可能です。これにより読み込み処理時のパフォーマンスが向上します。一方で書き込みロックは排他制御を行うため、ミューテックスと同様にシリアライズされます。 Linuxではpthread_rwlock_t型で定義されます。この型を用いてロッ ...

7月15日 19:55 投稿

Javaのマルチスレッドプログラミング

マルチスレッドについての解説を始める前に、いくつかの重要なポイントについて説明します: プロセスとスレッドの違い: プロセス:独立したメモリ空間を持ち、プロセス内のデータ保存領域(ヒープ領域とスタック領域)は独立しています。少なくとも1つのスレッドを含みます。 スレッド:ヒープ領域は共有され、スタック領域は独立しています。スレッドが消費するリソ ...

7月7日 21:39 投稿

Javaのスレッド同期:ReentrantLockとsynchronizedキーワードの実装

第14章 コンカレンシー スレッド同期 マルチスレッド環境における実行の不確定性問題を解決するため、スレッド同期メカニズムが導入されます。これにより、あるスレッドが特定のメソッドを使用中は、他のスレッドは待機状態になります。 Javaでマルチスレッド同期問題を解決する方法は主に2つあります: Java SE 5.0で導入されたReentrantLockクラス 共有メモリのクラ ...

6月27日 21:56 投稿

CountDownLatchによるスレッド間の同期制御

複数の非同期タスクがすべて終了した後で次の処理を開始したい場合、CountDownLatchを使うと簡潔に記述できる。内部的には「残りタスク数」を管理するカウンタを持ち、各タスクは完了時にcountDown()でカウンタをデクリメントし、待機側はawait()でカウンタがゼロになるまでブロックされる。 主要APIの概要 コンストラクタ CountDownLatch latch = new CountDownLatch(並 ...

6月16日 19:15 投稿

Javaにおけるマルチスレッディングと同期制御、スレッドプールの実践

マルチスレッドの実装方法 Javaでは複数のスレッドを生成して並列処理を行うことができます。主な実装パターンは以下の3つです。 1. Threadクラスの継承 カスタムスレッドクラスを作成し、Threadクラスを拡張する方法です。最もシンプルなアプローチです。 class WorkerThread extends Thread { @Override public void run() { for (int i = 0; i < 5; ...

5月31日 08:34 投稿

iOSにおけるスレッド同期とロックメカニズム

セマフォ:dispatch_semaphore_t ミューテックス:pthread_mutex、@ synchronized、NSLock 条件付きロック:NSConditionLock、NSCondition 再帰ロック:NSRecursiveLock スピンロック:OSSpinLock(非推奨、優先度逆転によるデッドロックの問題が発生) リードライトロック:atomic(iOS10以降はos_unfair_lockで実装) スピンロックとミューテックスの違い スピンロックは ...

5月24日 09:18 投稿