2023/06/05 このエントリーをはてなブックマークに追加 はてなブックマーク - オフラインでJJUG CCC 2023 Springに参加してきました

オフラインでJJUG CCC 2023 Springに参加してきました

カテゴリ: ,

※Dukeが気になったので写真撮った

JJUG CCC 2023 Springに行ってきました!


JJUG CCCというカンファレンスが久しぶりにオフラインでやるということでちょっと行ってきました。
自分自身は最近Javaは書いてないしRustとかReactとかNext.jsとか書いててちょっとアレがアレではあったのですが、Virtual Threadの話は気になるしオフラインというのも色々エネルギーをもらえそうかなということで行ってみました。


完全に個人的な意見なんですが、オンラインだと何かしら子供の面倒見たりだとか、家事ちょっと手伝ってよだとかしっかり集中するのが難しいです。
また、時間に空きが出来、集中できる状況だとしても
1時間かけてそのセッションを聞くぞーというより倍速再生して掃除でもしながら…みたいな妙な雑念が生まれます。

その点オフラインは一緒に話を聞いている人々が居て、目の前で登壇者がしゃべって自分に語りかけてくるわけで集中しやすいよなぁと改めて思いました。雑念も湧きにくい(発表を聞きながらTwitterしてるやつが何言うてんねん、というのは置いといてください)

オンラインであっても如何に集中できる状態を演出するかみたいなのはオンラインでの登壇とかイベントの演出とか難しいところだなぁと思います。
コロナ禍の3年ぐらいで、皆オンラインスタッフ業とかオンラインでの発表というところだとこなれてきた感がありますが、如何に満足度を上げるかとか有意義にするかとかオフラインと差別化するかとかは極まってないような印象もあります。



cero_tさんとかサムライズムのyusukeさんとかは話したかったけどタイミング的にアレして話せなかった。
ちょこっと話せたのはirofさんとかじゅくちょーさんとかよこなさんとかtadaさんとかてらださんとかとか。色んな人と話せて嬉しかったです。


ちょっと家庭の都合もあり、興味のある2セッションに絞りました


自分の視力低下もあいまってか、スライドあんまり見えなかった。。
後ろの方じゃなくてもうちょっと前に座れば良かったです
そのため、ちょっとメモは少なめ
てらださんの発表に関する記事: https://qiita.com/yoshioterada/items/2a4cc2c9995254560fce
以下、メモ書きです。

copilot

Azure Open AI PlayGround

その他:


資料:https://speakerdeck.com/skrb/virtual-thread-dao-ru-nobei-jing-to-xiao-guo-de-nashi-ifang-372a94a6-b5dc-448d-b1d1-e8750efdafcb

メモ書きです。

Veirtual Threadの概要


  • JVM管理の軽量Thread
  • 他の言語だとファイバー
  • コルーチンとgoルーチンとは観点が違う
  • 目的:スループット向上
  • I/O多いシステムにで効果的
  • 魔法ではない。使ったからと言ってCPUが変わるわけではない
  • スループットは上がるが、応答時間下がる

スレッドにまつわる歴史(Java 5)


  • Concurrency Utilities
  • newFixedThreadPool 応答時間重視
  • newCachedThreadPool スループット重視
  • Thread Per Request/Task

スレッドにまつわる歴史(Java 7)


  • Folk Join
  • 分割統治法
  • work stealing task scheduler

業務タスクの特徴


  • 通信、データベースアクセスが多い
  • i/Oばっかりが時間を食う
  • I/O wait。ブロッキング
  • CPUが遊んじゃうし、スレッドのコンテキストスイッチもない
    • Folk Joinだと遊んだまま
    • Project lambdaで遊ばないようになった

スレッドにまつわる歴史(Java 8)


  • Completable Future

    • 非同期処理を関数で
    • WebFlux、Helidon SEなど
  • 関数

  • 従来の記述と違う、例外処理、デバッグしにくい・・・

  • 非同期だとスタックトレースが途絶える


そこで


  • 逐次処理で例外処理も扱いやすいスループットも上がる
    • Virtual Thread

Virtual Threadの詳細


  • 区別のため、既存のThreadをPlatform Threadと呼ぶようになった
  • 実行時、Virtual ThraedとPlatform Threadかどうかは分からん
  • Virtual ThreadはPlatform Threadにマウントしたりする
  • マウントしたThreadをキャリアThreadという
  • 限定継続、Continuationでコンテキストスイッチを高速化
  • work-stealingによるスレッドスケジューリング
  • スタックトレースも追いかけられる
  • 限定継続を入れたとはいえ、コンテキストスイッチは依然としてオーバーヘッドある
  • I/Oによる。Socket IOは対応している
    • park(駐車)とi/O割り込みによるreadを繰り返す
    • yield continuation。yieldは譲るということ
  • ContinuationはVirtual Threadの内部クラスなので外から使えない

Virtual Threadの使い方


  • Executors.newVirtualThreadPerTaskExecuctor
  • Executors.newThreadPerTaskExecuctor(Thread.ofVirtual().factory())
  • Threadとインターフェースは同じ(シグネチャ同じ)
  • Virtual Threadを直接作るようなことはしない方が良い
  • 独自のExecutorServiceを作るような人だけ明示的に呼び出すとかかな
  • ExecutorServiceはJava19からAuto Closable

注意点


  • synchronizedではなくReentrantLockやセマフォやCountdownLatch
  • スレッドは使い回さない
  • Threadのstop,suspend,resumeはdeprecated。直接使わない


2つセッションを聞いてからアンカファレンスをぼーっと立ち聴きして帰りましたとさ。
本当は懇親会とかも出たかったけど、お家帰って子供の面倒見たりもあるのでなー


知らない知識を学ぶ良い機会になりました。
あと人の熱気とか楽しそうな感じとか良い刺激になったなと思います

またどこかで会いましょう




0 件のコメント:

コメントを投稿

GA