https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3
十六進法で表現すると 1234ABCD という 1 ワードが 4 バイトのデータを、バイト毎に上位側(通常左側)から「12 34 AB CD」のように並べる順序はビッグエンディアン (英: big-endian)、下位側(通常右側)から「CD AB 34 12」のように並べる順序はリトルエンディアン (英: little-endian)
- x86, x86_64 はリトルエンディアン
データの流れを自由に制御するために使える構造体
io.MultiReader
io.TeeReader
io.Pipe
(io.PipeReader
とio.PipeWriter
)
- チェネルは、データを順序よく受け渡すためのデータ構造
- チャネルは、並列処理されても正しくデータを受け渡す同期機構
- チャネルは、読み込み・書き込みで準備ができるまでブロックする機能
- バッファなしのチャネルでは、受け取り側が受信をしないと送信側もブロックされる
- POSIX 系の OS の場合、
syscall.Flock()
というシステムコールが利用できる
- OS のシステムコールにおいて整備するためのモデルとなるのが、同期処理 と 非同期処理、ブロッキング処理 と ノンブロッキング処理
- 同期処理: OS に I/O タスクを投げて、入出力の準備ができたらアプリケーションに処理が返ってくる
- 非同期処理: OS に I/O タスクを投げて、入出力の準備ができたら通知をもらう
- ブロッキング処理: お願いした I/O タスクの結果の準備が出来るまで待つ (自分は停止)
- ノンブロッキング処理: お願いした I/O タスクの結果の準備ができるのを待たない (自分は停止しない)
- 実行ファイルパス
- プロセス ID
- プロセスグループ ID、セッショングループ ID
- ユーザー ID、グループ ID
- 実行ユーザー ID、実行グループ ID
- カレントフォルダ
- ファイルディスクリプタ
- プロセス間通信: カーテルが仲介して、あるプロセスから、別のプロセスに対してシグナルを送ることができる。自分自身に対してシグナルを送ることも可能。
- ソフトウェア割り込み: システムで発生したイベントは、シグナルとしてプロセスに送られる。シグナルを受け取ったプロセスは、現在行っているタスクを中断して、あらかじめ登録しておいた登録ルーチンを実行する。
# macOS/BSD
man signal
強制力を持ち、アプリケーションではハンドルできないシグナル
- SIGKILL: プロセスを強制終了
- SIGSTOP: プロセスを一時停止して、バックグランドジョブにする
- SIGTERM:
kill()
システムコールやkill
コマンドがデフォルトで送信するシグナルで、プロセスを終了するもの - SIGHUP: 設定ファイルの再読み込みを外部から指示する用途で使われることがデファクトスタンダード