Engineering from Scratch

エンジニア目指してます

2022-06-01から1ヶ月間の記事一覧

2022/06/25

外部キーのインデックス rails を使用していると,referencesで外部キーに対して自動でインデックスが貼られる。しかし,そのインデックスの役割を正しく認識していなかった。 usersテーブルに対してpostsテーブルがuser_idを持っている時を考える。postsがu…

2022/06/13

eager_load と preload の使い所 includes eager_load と preload を呼び分ける。どちらかが呼ばれるかコントロールしにくいので,基本使わない。実装を読んでみようと思ったが,読み切るには重そうだったので,週末読む。 eager_load belongs_toとhas_oneに…

2022/06/12

Unix Processes Diving into Rack Rackのrackupコマンドは,プロセスをデーモン化できるため,そのコードを読んでいく。 exit if fork Process.setsid exit if fork Dir.chdir "/" STDIN.reopen "/dev/null" STDOUT.reopen "/dev/null", "a" STDERR.reopen "…

2022/06/11

Unix Processes Our First Pipe 複数プロセス間でのやり取りにパイプを使用する。パイプはデータを単方向通信する。writerがwriteした内容をreaderがreadできる。 irb(main):001:0> reader, writer = IO.pipe => [#<IO:fd 9>, #<IO:fd 10>] irb(main):002:0> writer.write("Into</io:fd></io:fd>…

2022/06/05

Unix Processes Communicating with Process.wait2 Process.wait2は子プロセスのpidとexit codeを含むstatusを返す。 irb(main):024:1* def use_process_wait2 irb(main):025:2* 5.times do irb(main):026:3* fork do irb(main):027:3* random_number = rand…

2022/06/04

Unix Processes Descriptors Represent Resources irb(main):002:0> passwd = File.open('/etc/passwd') => #<File:/etc/passwd> irb(main):003:0> puts passwd.fileno 9 => nil irb(main):004:0> hosts = File.open('/etc/hosts') => #<File:/etc/hosts> irb(main):005:0> puts hosts.fileno 10</file:/etc/hosts></file:/etc/passwd>…

2022/06/02

プロセスとスレッド MMU Memory Management Unit プロセスごとに専用の物理メモリ領域を確保し,その物理領域にアクセスするための仮想アドレスを用意し,両者のアドレスのマッピングを行う マッピング情報はページテーブルという名前でメモリ上に保持される…

2022/06/01

PumaとUnicorn Unicorn blocking マルチプロセス forkを使ったmaster-slave unicorn-masterが起動するとunicorn-childをforkして生産する。暇になった,unicorn-childがunicorn-masterにリクエストを要求する。masterは要求のあったchildに処理を行わせるだ…

2022/05/31

NginxとApache 参考 qiita.com blog.inductor.me blog.framinal.life C10K問題とは ハードウェアの性能上は問題がなくても,あまりにもクライアントの数が多くなるとサーバーがパンクする問題のこと。プロセスやスレッドが多くなることが原因となる。 プロセ…