0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

サーバーエンジニアのためのC言語ロードマップ

0
Posted at

目的

C言語でアプリを開発することではない。

Linux・nginx・PHP・MariaDB・AWSなどが

なぜそのように動くのか

を理解することが目的。


なぜC言語を学ぶのか

Linuxカーネル

nginx

PHP

MariaDB

OpenSSL

Git

Redis

これらの多くはC言語で書かれている。

つまり、

WordPressで発生しているCPU使用率やメモリ使用量は、

最終的にはC言語の処理になる。


学ぶべき順番

電子

↓

CPU

↓

機械語

↓

C言語

↓

Linux

↓

nginx

↓

PHP

↓

WordPress

第1章 C言語とは

理解すること

  • C言語はCPUに近い言語
  • コンパイルとは何か
  • 実行ファイルとは何か

理解できるようになること

main()

↓

コンパイル

↓

機械語

↓

CPU実行

第2章 メモリ

最重要。

理解すること

  • RAM
  • アドレス
  • バイト
  • int
  • char
  • 配列

イメージ

メモリ

0x1000

↓

10

0x1004

↓

20

CPUは

「アドレス」

を使って読む。


第3章 ポインタ

サーバーエンジニアが最初につまずく場所。

しかし一番重要。

理解すること

値

ではなく

住所

例えば

int a = 10;
int *p = &a;

ここで

a

↓

10

ではなく

a

↓

0x1000

という考え方になる。


第4章 関数

printf()

malloc()

free()

fork()

open()

など

Linuxも関数の集まり。


第5章 構造体

Linuxでは超重要。

例えば

struct process

のように

プロセス情報をまとめる。

nginxもMariaDBも大量に使う。


第6章 ポインタと構造体

ここまで理解すると

Linuxソースコードが読めるようになる。


第7章 malloc()

メモリ確保。

malloc()

↓

RAMを借りる

free()

返す。


第8章 スタックとヒープ

超重要。

Stack

↓

関数呼び出し

Heap

↓

malloc()

PHP-FPMやMariaDBでも重要。


第9章 システムコール

Linuxへお願いする命令。

例えば

read()

write()

open()

close()

fork()

exec()

これで

「ファイルを読む」

「プロセスを作る」

などを行う。


第10章 プロセス

fork()

↓

子プロセス

nginx

PHP-FPM

MariaDB

全部これ。


第11章 スレッド

pthread

CPUコアとの関係が分かる。


第12章 ファイル

Linuxでは

全部ファイル

という考え方。

ソケットも

パイプも

デバイスも。


第13章 ソケット

HTTP通信の正体。

socket()

bind()

listen()

accept()

nginxが毎秒何万回も呼んでいる。


第14章 epoll()

nginx最大の特徴。

epoll_wait()

これがあるから

何万接続も処理できる。


第15章 まとめ

最終的に

WordPress

↓

PHP

↓

C言語

↓

Linux API

↓

CPU命令

↓

CPU

↓

電子

まで頭の中でつながるようになる。


サーバーエンジニアとして最優先で理解したいもの

★★★★★

  • メモリ
  • ポインタ
  • スタック
  • ヒープ
  • プロセス
  • システムコール

★★★★☆

  • 構造体
  • ソケット
  • epoll
  • fork
  • exec

★★★☆☆

  • ビット演算
  • マクロ
  • プリプロセッサ
  • Makefile

★★☆☆☆

  • GUI
  • ゲーム開発
  • 数値計算

(サーバーエンジニアでは優先度は低い)


最終目標

以下の流れを頭の中で説明できるようになる。

ブラウザ

↓

HTTP

↓

nginx

↓

socket()

↓

epoll()

↓

PHP-FPM

↓

fork()

↓

PHP

↓

MariaDB

↓

read()

↓

CPU

↓

RAM

↓

HTML生成

↓

ブラウザへ返却

この流れを理解すると、CPU・メモリ・負荷・ボトルネック・キャッシュ・インスタンスタイプ選定まで、すべてが一本の線で理解できるようになる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?