非同期な朝食準備

  おおよそ日報のようなもの。昨日は非同期処理について少し勉強したり、TCPについて勉強したり、コンパイラの講義に出たりした。

 非同期処理の説明というと、個人的にはマイクロソフトのドキュメントの文章が印象深い。たしかC#の解説ドキュメントだったと記憶しているが、非同期処理を料理に例えて説明している。朝起きて、2枚のフライパンを温めて、トースターにパンをセットし、ベーコンを炒めて、タマゴを炒めて、牛乳を用意する。最後にパンを皿に載せて、ベーコン、タマゴの順で載せて完了。ここでは非同期処理が行われている。例えばトースターにパンをセットして焼くシーンだが、トースターをパンにセットしたあとは、人間は一度トースターに関する処理を手放して、ベーコンやタマゴを炒めるタスクに移行する。以降トースターに関しては、トースターが焼き上がりの通知を入れてくるまではノータッチになる。仮に焼き上がりの通知が上がったとしても、すぐに処理する必要はない。焼き上がり通知が入って、かつトースターのタスクを再度行うだけの時間的余裕があれば、処理を再開する。まさしく非同期処理。非同期処理に対立する概念として同期処理がある。これは逐次的にすべてのタスクをこなして行く方式で、トースターの例で言ったら、トースターにパンをセットしたあと、焼き上がるまでひたすらトースターを眺めて続け、パンが焼き上がったのを確認してからベーコンやタマゴを炒めるタスクに移行する、という状況だ。非常に効率が悪い。これは非同期処理と同期処理の違いを理解し、また、同期処理を非同期処理に置き換えることで効率を改善できる可能性があるということを示すとても良い例えだと思う。いつもいつも非同期に置き換えられるわけではないのだが、基本的に「一度行い、待つタスク」に関しては非同期に置き換えられる、そんな認識。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。