- 1 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:04:49.48 ID:nPKzA798.net]
- 競え
- 702 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 01:33:52.46 ID:0/nHr1m/.net]
- >>686
というか、Promiseは自分では使いたくないから興味が沸かないし、 実験する時間も取りたくないのに、サンプルなどでは大量に使われてる 場合が多いからもある。 意味が無いものには興味が沸かないというか。
- 703 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 01:36:10.77 ID:0/nHr1m/.net]
- なお、俺が数学が不得意に分類されるなら、全人口の99.99%位は数学が
超不得意になるだろうな。
- 704 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 01:45:02.34 ID:zPx7iS9T.net]
- 一生そのままRustにも興味持たないで平和に暮らしてくれ
意味無いから
- 705 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 01:46:47.59 ID:0/nHr1m/.net]
- Promise知らないことは単なる知識。
O(1)やリンクリストの話は、イマジネーションの世界だから生まれつきの 頭の良さの影響が大きい。 Promiseを知らないことを馬鹿にされても、俺の意見が間違っていることには成らない。
- 706 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 01:52:57.27 ID:0/nHr1m/.net]
- 明らかに間違ってるのに、俺を馬鹿にしてくるのは、この分野は、
博士課程などにも馬鹿が多いからかもな。 どうみても生まれつきの頭は大したことが無いのに、大学に残ってるような 人が多い分野。 それで馬鹿なのに勘違いして、明らかに間違ったことをいつまでも信じ続ける 人が居る。 さらに悪いのは間違ったことを流布してしまう。
- 707 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 01:53:04.71 ID:oI4zTDt2.net]
- rustの非同期ランタイムは非標準ライブラリで提供されているからフリースタンディング環境でも使えるものがあったりするんだけど
c++ の future とかコルーチンってその辺どうなんですか?
- 708 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 02:18:40.66 ID:nZUH6NM1.net]
- 非同期と同期のどちらがよいかは場合によりけりでしょ。
複数のクライアントから同時接続されるサーバだとあるクライアントと通信している間に別のクライアントからの要求を処理しないと効率悪いだろうし。 ネットからファイルを一つダウンロードして解凍して中のファイルを読み込むだけのプログラムだったら前の処理が終わらないと何もできないから同期処理で十分。
- 709 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 02:25:30.27 ID:SFGWVOvC.net]
- >>690
知るか知らないかではなく 理解できるか理解できないかの違い もし非同期プログラミングが出来ないならば数学も弱いとわかる >>693 後者の初心者向けプログラミングだけしか理解できずに終わるか それとも前者の普通のプログラミングもできるようになるかの違い
- 710 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 02:58:41.60 ID:0/nHr1m/.net]
- >>694
需要が無いのに知っていることを自慢するって、真空管技術を知っていて 偉いと思ってるのと同じようなことだと思うが。
- 711 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 03:01:24.50 ID:0/nHr1m/.net]
- >>693
通信の場合、マルチスレッドプログラミングなら意味はあることもあるな。 しかし、単一スレッドで非同期にすることにどれだけ意味があることか。
- 712 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 03:15:28.24 ID:SFGWVOvC.net]
- >>695
需要があるから使われているし さらに利便性を高めるためにどの言語もasync/await導入したり導入検討している >>696 例えば1000か所から通信でデータを取ってくる場合 (1)順番に同期的に一つずつ順に1000回処理するの? (2)マルチスレッド1000個生成するの? (3)普通はシングルスレッドかCPUスレッド数(2個とか4個とか8個とか)分までのマルチスレッドにて
- 713 名前:スレッド内マルチタスクをして実行します
このようにマルチスレッドでも各スレッド内では複数のタスクが非同期に多数動きます [] - [ここ壊れてます]
- 714 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 03:22:45.28 ID:0/nHr1m/.net]
- >>697
使用用途は、通信に限られるような気がするな。 余り一般化して欲しくない。 面倒だから。 それになんかわかりにくい。
- 715 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 03:42:46.81 ID:SFGWVOvC.net]
- >>698
このネット時代では通信しないアプリの方が例外的な特殊な存在 そして通信だけでなくヒューマンインタフェースも非同期に発生 その『それになんかわかりにくい。』から数学が苦手だと予想します
- 716 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 04:21:18.83 ID:nZUH6NM1.net]
- OpenGLやCUDAでもGPUに処理をお願いする関数を呼んだら計算が完了する前に戻る非同期処理は一般的に使われているよ。
- 717 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 07:22:02.74 ID:2cqvkUoy.net]
- >>698
GUIなアプリは非同期プログラミングが避けられないと思うぞ でないと、何か処理するごとにユーザーに待たせることになる シングルスレッドでも工夫次第で待たせなくは出来るが、かえって実装が複雑になってしまう
- 718 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 08:05:39.60 ID:SFGWVOvC.net]
- >>701
ブラウザ上で動いているJavaScriptはシングルスレッドですが スレッド内で非同期に複数のタスクが動くのでGUIに対応出来ています 例えばマウスが動いたりクリックされたりするたびに次々と新たなスレッドが起動したら重すぎて困ります プロセス起動よりは軽いとはいえスレッド起動はかなりのコストがかかります だからマルチスレッドではなくシングルスレッドで動いています このようにシングルスレッド内で並行プログラミングできるところが非同期プログラミングの良いところです
- 719 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 08:19:28.96 ID:SFGWVOvC.net]
- これはサーバー側も同じです
今どきサーバーは数万のクライアント接続が同時に来ても捌けますが これを数万のスレッド起動で実装したらリソースが足りず動きません 実際にサーバーが使用するスレッド数は最大でも使用CPUが同時実行できるスレッド数で8個とか16個などだけです したがってそのスレッド各々が何千や何万のクライアントを相手に並行して非同期に処理しています
- 720 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 08:56:34.20 ID:Zovg4aIt.net]
- Windowsアプリの件はわかる気がするわ。
Wixdowsアプリ(イベントドリブン)はイベントのキャッチはシングルスレッドでやっているのでイベントの実行から終了は全て同期処理。 ただし、イベントの実処理(中身)は非同期で実行する(しているケースが多い)からイベントの実処理が終わらずとも次のイベントが実行されているってことなんじゃない? イベントドリブンの認識間違ってたらごめんね
- 721 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 10:40:28.38 ID:oI4zTDt2.net]
- 数学100点の人はgoやったら良いのでは
同期プログラムと同じ書き方で非同期になるよ
- 722 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 11:14:17.47 ID:SFGWVOvC.net]
- >>705
同期プログラムと同じ書き方といっても局所的な表面上だけだからgoroutine間のやり取りや制御で理解できなくなると思われる そして同期プログラムと同じ書き方という点ならばasync/awaitサポートする任意の言語でawaitを付ければ同期的にプログラミングできるわけだけどこれも彼には厳しいかも
- 723 名前:デフォルトの名無しさん [2021/12/01(水) 18:57:51.36 ID:no3HGX5y.net]
- posixシグナル完全対応。
- 724 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 20:55:01.67 ID:oI4zTDt2.net]
- >>706
そんな... 数学100点なのに比較的学習が容易とされているgoも使えないなんて悲しすぎる
- 725 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 21:05:34.73 ID:oI4zTDt2.net]
- 彼がしきりにアピールする東大の入試数学やセンター試験の出題範囲だとBASICがせいぜいだから
非同期やデータ構造に対する理解を求めるのが酷だったか
- 726 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 22:03:37.03 ID:sxQ1el+x.net]
- 東大の品位を下げるようなことはやめてくれ
- 727 名前:デフォルトの名無しさん mailto:sage [2021/12/01(水) 23:31:46.90 ID:Mcs7wCKf.net]
- センターでBASIC出題って何年前よオイ
- 728 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 01:07:51.06 ID:VtvQmLxd.net]
- 2015年まであったらしい
- 729 名前:デフォルトの名無しさん [2021/12/02(木) 02:35:29.
]
- [ここ壊れてます]
- 730 名前:16 ID:nb2+kp22.net mailto: >>704
イベントではなく、シングルスレッドでメッセージキューに溜まったメッセージを 1つづつ取りだして処理するので、1つのメッセージ処理実行中、同時に別のメッ セージ処理が実行されることはないので、排他処理が要らない。 ところが、メッセージ処理の中で受信待ちとか発生するコードだと、タイムアウト等で 抜けるまでメッセージ処理が終了しないので、ウィンドウ再描画などのメッセージも 処理されず、見かけ上GUIが固まったようになる。 だから、通信とかは、マルチスレッド化する必要がある。 C/C++はOSが走ってない ワンチップマイコンのソフト開発にも使われるので、言語仕様にスレッドを持ち込む 必要はないと思う。 [] - [ここ壊れてます]
- 731 名前:デフォルトの名無しさん [2021/12/02(木) 11:04:55.74 ID:yooJVl//.net]
- 関係ないけどautoが動的な型付けだと思ってたわ
auto = automaticだろ 名前負けしてんじゃねーよ クソ言語か
- 732 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 11:36:20.37 ID:YNqR6oNM.net]
- >>714
仕様で明確に定義されている以上、そんなアホな勘違いするやつが悪い。
- 733 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 13:28:19.92 ID:gymk1AzN.net]
- >>702
さすがにこの理解はないわ もうちょっと勉強したほうがいいぞ
- 734 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 13:37:53.33 ID:1aORNnKD.net]
- >>716
合っとるよ そのへんはC10K問題などで知見が広まりプロセスやスレッドを増やすのではダメだと結論出ている それ以降はスレッドの中で非同期にどれだけ多数のタスクをこなすかが勝負となった
- 735 名前:デフォルトの名無しさん [2021/12/02(木) 15:03:03.48 ID:2R2gcOCs.net]
- Cのauto
C++のauto 本来の仕様は一緒のはずなのに使われ方が違ってて笑う
- 736 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 17:16:10.79 ID:RD57FJl6.net]
- だって誰も使わなかったし……
- 737 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 17:21:01.57 ID:BMPRSKoA.net]
- 次は register がつぶされる番ですねっ
- 738 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 17:29:10.36 ID:tUkQvs14.net]
- >>718
そんな事で笑ってたらC/C++を覚えるまでに笑いすぎて死ぬぞ
- 739 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 20:09:00.51 ID:3TzX18xa.net]
- >>415-416 シークする必要どうのこうの
>>583 アクセス用にArrayListを使う例 この辺↑の話題のやつを実装してみた Rc<RefCell>をまず共有しておいて、中身へのborrow()や borrow_mut()は最小限の時間で行えば十分じゃないかな? ダメ? 実行時にうまく中身を借用できているかは使う人次第ってことになる https://ideone.com/bd0cFx ・注意:双方向リストだけど循環参照は未解決のまま ・注意:要素への参照を使っての操作はリスト側には未反映 (front, backを正しく再設定し直したりはしないということ) (両端の要素の外側に追加したときとかおかしくなるはず) ・手元の1.8.0で主に動作チェック ・基本的によく分かってないので妙な箇所があるはず ・イテレータを提供したかったがよく分からなかったので諦めた ・fmt::Debug for LinkedList<T>は本来はもっとスッキリ書けるはず ・push_prev(&self, h)などが何も返さないのは、selfを返すかhを返すか どっちを返すのが自然なのかという判断に迷って決め切れなかったため
- 740 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:02:35.79 ID:ymuOgB5E.net]
- >>717
クライアントの話なのにC10K持ち出して しかも無知晒しただけやんw
- 741 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:38:58.00 ID:7kQFmmWN.net]
- c10kはリソース問題だからブラウザサイドでも同じだよな
5chのページとか見ると多数の広告やら何やら大量にコネクション貼りに行くけど非同期で並行にシングルスレッドでも余裕で可能 これが同期プログラミングしかできない人が作ると数十のコネクションに数十のスレッドを無駄に使うか もしくはシングルスレッドで1つずつ順に時間をかけるかのどちらかとなる
- 742 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 21:47:37.10 ID:AzIeaNjo.net]
- 広告アクセスに時間がかかるなんてのはc10kと全然関係ないだろう
- 743 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 22:21:10.00 ID:UYYLW8tE.net]
- コネクション多数確立するという意味では同じだがC10Kと比較するのはおおげさすぎる
今時のブラウザは非同期処理の塊だろうからもっと良い例あるのでは
- 744 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 22:30:51.78 ID:E1OmpA3W.net]
- ブラウザではそもそもHTML5の登場までマルチスレッド自体使えなかったし
そんな中でもAjaxでイベントによる非同期処理は要求されたし ブラウザjsに関して言えばマルチスレッドのオーバーヘッドに耐えられず必要に駆られてっていう理由ではなく 従来のイベント非同期をPromiseで簡便に書けて、async/awaitでもっと簡便に書けて喜ばれた、というのが正しい理由でしょうね
- 745 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 22:41:56.03 ID:mlkfy4i9.net]
- >>724
それブラウザがマルチプロセス・マルチスレッドで仕事をこなしてるからGUIアプリとして使いものになるんだぞ まさかJavaScriptだけで実現できてると思ってたのか?
- 746 名前:デフォルトの名無しさん mailto:sage [2021/12/02(木) 22:45:23.47 ID:b1gognmn.net]
- どこかのスレで見たグリーンスレッド知らないおじさん?
- 747 名前:722 mailto:sage [2021/12/03(金) 00:10:46.04 ID:tTDO4F9c.net]
- >>722
https://ideone.com/IY3aFj ・イテレータを提供 ・impl Debug for LinkedListも若干スッキリ
- 748 名前:デフォルトの名無しさん [2021/12/03(金) 00:22:36.68 ID:aPplovFu.net]
- >>722
リスト構造ってほとんど使わんなぁ。 C++だとインスタンスの配列じゃなくて、 インスタンスへのポインタ配列を使えば、配列サイズの拡張に伴う領域確保とコピー が行われるのは、配列要素であるポインタだけなので、要素数が増えようが、複雑な オブジェクトだろうが、処理時間は最小限で済む。 リスト構造の欠点はソートに弱いこと。 オブジェクトインスタンスへのポインタ配列 ならソートの場合でも、ソート対象はポインタの並び替えだけで、ポインタが指す オブジェクトのインスタンスには一切触らない(コピーや再配置は行わない)で済む。 「100日後に退職する47歳」に出てくる「クイックソートの計算量」なんて質問をする 面接官は、記憶力が全ての学力試験が産んだ馬鹿でしかない。 現実問題としては、 ソートする必要がある時はソートしなければならない。 聞くべきは『効率的にソート するには、どんなデータ構造を採用すべきか』である。
- 749 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 00:34:51.88 ID:LOLVZOda.net]
- リスト構造も結局のところポインタやん
- 750 名前:デフォルトの名無しさん [2021/12/03(金) 00:38:41.22 ID:aPplovFu.net]
- >>697
GUIスレッドの裏で動く、通信専用のワーカスレッドを1つ作成して、順番に1000個 のサーバヘアクセスに行くのが簡単かつ現実的じゃないかな。 むろんコア数を調べてワーカスレッド数の上限を可変にしてもいいが、アクセス先 リストの消し込みやエラー処理とか自動リトライとか面倒になるし、そこらを頑張っ たところで、実際のところほとんどの場合は回線速度で頭打ちになる。 それと、たとえスレッドが1000個作れても、実際の環境では、経由するルータや 相手サーバ側の制限などで、同じIPアドレスから、同時に1000個の通信セッション が張れないことの方が多い。
- 751 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 00:40:38.11 ID:RidNMi7I.net]
- n番目の要素とm番目の要素を入れ替えるのに
配列だとポインタの読み込み2回、書き換え2回で済むのに対し 単方向リンクリストだと読み込みmax(n, m)+4回、書き換え4回必要になるからこれだけでかなりの差が生じる
- 752 名前:デフォルトの名無しさん [2021/12/03(金) 00:44:57.19 ID:aPplovFu.net]
- >>732
配列と違って、リスト構造を構成する各要素は、メモリ空間上に隣接して配置されて いないのでqsort()ではソートできない。 あと、リスト内に循環参照がないとしても、 リストをバラす際にコストが掛かる。
- 753 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 02:01:34.62 ID:rUbWPynB.net]
- >>731
まあメモリが安く大容量になりましたからね…
- 754 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 02:06:12.08 ID:7zfb8kOc.net]
- >>736
QZちーす
- 755 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 02:08:33.95 ID:rUbWPynB.net]
- >>735
リストのソートにはコムソートが容易に適用できたと記憶しています、ほぼO(NlogN) https://mevius.5ch.net/test/read.cgi/tech/1434079972/107
- 756 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 05:25:43.24 ID:nNIjH1TY.net]
- >>728
前者はその通り 後者は違ってJavaScriptだけでもGUIアプリは普通に作れる 例えばNode.jsでQtベースの物は軽くて便利
- 757 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 05:44:07.66 ID:nNIjH1TY.net]
- >>733
> 通信専用のワーカスレッドを1つ作成して、 > 順番に1000個のサーバヘアクセスに行くのが簡単かつ現実的じゃないかな。 それは昔の同期プログラミングのマズいやり方でとてつもなく遅くなってしまう > 経由するルータや相手サーバ側の制限などで、 > 同じIPアドレスから、同時に1000個の通信セッションが張れないことの方が多い。 経由する普通のルータにそんな制限はないです 1000ヶ所へ取りに行くという話だから相手サーバー側には各々1つのコネクションしか貼られないため 通信セッションが張れないということもありません > そこらを頑張ったところで、実際のところほとんどの場合は回線速度で頭打ちになる。 たった1000個でそんなことは起きません 数KBの1000倍は数MBですから
- 758 名前:デフォルトの名無しさん [2021/12/03(金) 08:06:35.94 ID:aPplovFu.net]
- >>739
それって、Qtライブラリ(JavaScriptではなく、CやC++で書かれている)が、マルチ スレッド機能を持ってるだけでは?
- 759 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 08:48:42.45 ID:10RvFZJW.net]
- >>739
そりゃC++だから軽いわな でもってシングルスレッドかマルチスレッドかの話には基本的に関係ないわな JSのシングルスレット非同期モデルで対応できるのは I/O待ち等でCPUがidleになる場合か ホスト環境が提供する別のプロセスやスレッドに処理をオフローディングできる場合だけ デスクトップアプリでそこそこ重いSQLiteへの読み書きなんかをJS実行スレッドでやれば非同期だろうがGUIに顕著な影響がでる だからJS使ってても当然マルチスレッド化する
- 760 名前:デフォルトの名無しさん [2021/12/03(金) 09:01:39.32 ID:aPplovFu.net]
- >>740
> それは昔の同期プログラミングのマズいやり方でとてつもなく遅くなってしまう 実際、書いたことある? Webサイトの複数ページを移動しながらスクレイピング して、ダウンロードファイルのURLを取得し、HTTPまたはHTTPSでファイルを順次 自動ダウンロードする自分専用ソフトを書いて使ってるけど、ダウンロード中に GUIのプログレスバーや転送量/速度などの更新や、キャンセルボタン等の関係から、 GUIスレッドと通信スレッドに分けてるけど、速度はほぼ回線速度と相手サーバーの 応答に依存だよ。 > 経由する普通のルータにそんな制限はないです > 1000ヶ所へ取りに行くという話だから相手サーバー側には各々1つのコネクション > しか貼られないため通信セッションが張れないということもありません 確かに1000個のファイル取得先が別々なら、相手サーバーのコネクションは1つだけ でセッション数も制限を受けないけど、2000を超えると安物や古いルーターだとNAT テーブルの制限に引っ掛かる気がする。 > たった1000個でそんなことは起きません > 数KBの1000倍は数MBですから そんな制約あったっけ? ちなみに自分が書いたアプリでダウンロードしているファイルは、小さいもので数百KB 大きいと+数MBくらいで、1000個(総容量約3.5〜3.7GB)ダウンロードすると2時間〜 3時間くらいかな。 回線はSoftbank Air(非5G)で、今の時間帯だとGoogleのSpeedtestで、ダウンロードが 20Mbpsくらい。
- 761 名前:デフォルトの名無しさん [2021/12/03(金) 09:06:26.24 ID:aPplovFu.net]
- ちなみに、HTTP/HTTPSで速度を上げるには、市販ダウンローダーが実装している、
分割パート毎にマルチセッションで同時ダウンロードして連結する方法もあるが、 ダウンロード先が同じサーバーで、アクセス遮断されないようにというのもあって 1セッションでのダウンロードにしてる。 本当はロボットであることを覚られないよう、ファイル単位のダウンロード完了後に ランダムな秒数の待ち時間をいれるべきだろうが、今のところやってない。
- 762 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 14:35:28.91 ID:fdWJSRDO.net]
- >>743
> 20Mbpsくらい。 ということは、毎秒2MBくらいのダウンロード能力があり、1分あたりでは120MB、1時間あたり7GBくらいはダウンロードできるということになる > 1000個(総容量約3.5〜3.7GB)ダウンロードすると2時間〜 > 3時間くらいかな。 めちゃくちゃ遅くね?
- 763 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 14:55:37.25 ID:9vhBCv/o.net]
- そもそもlibevとかlibeventとかはCで書かれたライブラリでC++用のリンクヘッダもあるけどNodeやRustの
専売特許じゃない、むしろ後発でC10k、promise、async/awaitだとかいってるアホは市んでほしい… C/C++では現状コールバック関数でしかない。もちろんC++22とか出てきてないものは除く
- 764 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 15:13:11.54 ID:RidNMi7I.net]
- 非同期プログラミングの先達という意味ではそうだけど
callback hell をなんとかするために生まれてきた promise や async/await にはそれはそれで価値を認めるべき
- 765 名前:デフォルトの名無しさん [2021/12/03(金) 15:17:25.21 ID:aPplovFu.net]
- >>745
時間帯によって速度は変わる。 MicrosoftからWindows 10のISOファイルを1つ (ほぼ容量同じ)をWebブラウザで落としても、30分強で終わるどころか、ほぼ同じ くらい掛かる。
- 766 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 15:25:42.29 ID:fdWJSRDO.net]
- >>748
いや、それってMSのサーバ能力で律速されてるってことでしょ そもそも >> 通信専用のワーカスレッドを1つ作成して、 >> 順番に1000個のサーバヘアクセスに行くのが簡単かつ現実的じゃないかな。 > > それは昔の同期プログラミングのマズいやり方でとてつもなく遅くなってしまう に対する反論を試みようとしてるんだから、相手側の能力で律速するのなら「じゃやっぱマズいやり方だよね」ってことになるだろ
- 767 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 15:35:13.37 ID:fdWJSRDO.net]
- まぁ、Softbank Airなんて回線で、数GBもダウンロードすなってのもあるがw
- 768 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 15:52:47.63 ID:9vhBCv/o.net]
- 別にasyncはコールバック関数を何とかするために生まれた訳じゃない、勘違い甚だしいw
同期関数という普通の関数と、見た目上は同様に見えるように考えられただけで価値なんてほんの少ししかない。 むしろこのキーワードの導入によりコードの汚染が酷く、さらに言うならI/Oバウンドや*nix割り込みベースや そしてCPUバウンドな非同期(≒スレッド)と統一的に扱えないために複雑なフレームワークを導入する羽目になる。 一般的には、I/Oバウンドなブロック単位のI/O読み書き待ちでコールバックされることだけを主眼に置いて設計されて しまったがために多くの言語で採用されているが、スレッドや軽量ルーチェンとは互換性ない場合が多い。 ただ副次的にコールバック関数のネストが解決されているように見えるだけに過ぎない。
- 769 名前:デフォルトの名無しさん [2021/12/03(金) 19:35:25.25 ID:3ner7aMO.net]
- C10Kというけど、いま使ってるパソコンだってスレッドが数千あるのに、クライアントが1万程度でいまどき問題ある?
- 770 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 20:15:24.75 ID:XIVj35HM.net]
- 有線LAN なら、200Mbps ぐらい出る。
無線にすると、10〜20 無線スポットから離れると、1まで落ちる
- 771 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 20:20:25.08 ID:XIVj35HM.net]
- Elixir では、10万のプロセスを起動できる
これは、
- 772 名前:OS のプロセス・スレッドじゃないから。
Erlang 内の小プロセスだから出来る [] - [ここ壊れてます]
- 773 名前:デフォルトの名無しさん [2021/12/03(金) 20:32:10.63 ID:3ner7aMO.net]
- そんなに起動して何に使うの?
- 774 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 20:45:06.44 ID:RinLdTWR.net]
- ルーチェン
- 775 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:07:37.69 ID:xM1Kf0e8.net]
- >>751
非同期プログラミングの話をしているだけなのにそんなasync/awaitに限定するのがおかしいのではないかね さらにいえばasync/awaitの話とpromise/futureの話を同類に捉えているからちゃんと理解していないのでは? 非同期関数をなにか特殊なもののように捉えているのも怪しい 非同期ブログラミングとは同期ブロッキングI/Oによる非効率で無駄な方法を排除するプログラミングであって 昔も今も中心部分にselectやepoll等のシステムコールを核とするループすなわち高度化した時のスケジューラーで成り立っている そして読み書き可能になったら読み書きをするという極めて自然なプログラミング もちろんこのスケジューラー部分で割り込みやタイマー含めて共通管理できるため「相性が悪く複雑になる」というのも間違いだ もちろん読み書き可能になったら教えて!と最初に登録するところから始まるわけだから 読み書き可能になったぜ!と教えてもらう部分がコールバックとなるのは当然の話 だからそれをまとめて包んだ非同期関数は当然コールバックとなりI/O待ちブロックされる同期関数より極めて効率が良い promise/futureはこの部分のインターフェース部分だけを抽象化しただけに過ぎず この中身は単なる状態管理だから具体的なI/Oやタイマー等と関係なく共通して使える点もプログラミングの利便性を向上させている そしてこれ自体はコールバックを無くしているわけではなく例えばクロージャを渡すメソッドなどを用意することでコードの見た目を改善している これで非同期関数のインタフェースとして(直接)コールバック系と(間接に行う)promise/future系((およびその両対応))に分かれた 以上ここまでの話は生のC言語でも普通にプログラミング可能な話である (メソッド呼び出しを除く) もちろんスレッドなんか存在しない環境でもシングルスレッドにて並行に動作するの非同期プログラミング 当然ながらマルチスレッドでも同じように動作させられる
- 776 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:08:57.91 ID:xM1Kf0e8.net]
- >>757の続き
一方でasync/awaitは全く別の話 これだけはプログラミング言語による支援がないと実現できない そしてこの導入目的は同期プログラミングしか出来ない人たち向けも含めて楽に非同期プログラミングするためであり asyncと宣言した関数などの中ではawaitを付ければ見かけ上は同期プログラミングと同じ記述ができる!という改革 これによりようやく真にコールバックが利用側からは消えたので「コールバックを無くすため」というのも間違ってはいない ではasync/await導入で非同期関数側はどう変わったか? 実は全く変わっていない、が正解 そのままpromise/futureを返す非同期関数と全く同じそのままである つまりasync/awaitは非同期関数を利用する側だけの話という点が重要 以上で>>751氏も非同期プログラミングを正しく理解できるであろうか?
- 777 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 22:13:40.85 ID:lnUl70HN.net]
- もはやC++もRustも関係無いマウント合戦になってら
- 778 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:22:05.85 ID:9uRuF5M7.net]
- もしかしてずーっと同じ人が暴れてんですか?
- 779 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:31:58.32 ID:DEDgCilv.net]
- どうしようもない二人が残っちゃったね
掃き溜め
- 780 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:40:57.15 ID:C/q0fsga.net]
- Goスレでも同じC#おじさんがRust/Goを学びかけて暴れてたから同じやつ
「真にコールバックが利用側からは消えた」なんてコールバック関数が消えたことはない。お前はHello worldでも 書いて満足してろwawaitの話とpromiseを同列に語ってんのもお前、「インターフェース部分だけを抽象化」なんて RustにもC++にも無いしC#おじさん臭さが露骨に出てる
- 781 名前:デフォルトの名無しさん mailto:sage [2021/12/03(金) 23:59:21.97 ID:zNp8n16A.net]
- >当然ながらマルチスレッドでも同じように動作させられる
そんなのはC#のような一部であり、多くのasyncを有する言語ではスレッド境界は越えられないのでそれぞれの スレッドがイベントループとイベントキューを有する。これはAスレッドで起こったイベントはBスレッドには 伝わらず”同じように動作させられる”なんてことは無い、実行の順序制御も当然バラバラ C++20でもコルーチェンたるco_return, co_await, co_yieldがあるのに、鬼の首を取ったようにRustなどの 触りだけ触れていて優位性を語ってるアホはまじ市んでほしい
- 782 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 01:46:20.63 ID:aNU60Xul.net]
- 最近は、一度もWindowsプログラミングしたこと無い人が増えてるからな。
Windowsは伝統的に非同期をほとんど使わないことを知らない人が多いらしい。
- 783 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 01:54:42.66 ID:RzAYiznV.net]
- >>761
もともとrustスレで暴れてた人を隔離するために立てられたスレだから最初から掃きだめ
- 784 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:17:48.45 ID:6dkLKknu.net]
- >>763
>>当然ながらマルチスレッドでも同じように動作させられる >そんなのはC#のような一部であり、 >多くのasyncを有する言語ではスレッド境界は越えられない え?? Rustでは当然出来ますけど >スレッド境界は越えられないので >それぞれのスレッドがイベントループとイベントキューを有する。 え?? Rustではスレッド境界を超えつつ、それぞれのスレッドがイベントループとイベントキューを有することも出来ますけど >これはAスレッドで起こったイベントはBスレッドには伝わらず そこだけは正しいですw しかし暇になったスレッドがいわゆるワークスティーリングすなわち他スレッドからタスクを奪ってからイベント登録しますから、 >”同じように動作させられる”なんてことは無い 同じように別スレッドで動作を継続できます >実行の順序制御も当然バラバラ え?? 非同期だからバラしたタスク間の実行順序は例えば通信相手次第で変わりますけど それは単純なワンタスク同期なマルチスレッドの時も同じです 実行の順序制御が必要な部分のみ制御の意味での同期を行うのも同じです 例えば10個のタスクで並行して10ヵ所からデータを取得してその平均を出すならば平均を出す直前で10個全てのタスクの完了を待つだけです 非同期プログラミングしたことがない人は間違った思い込み妄想だらけで大変
- 785 名前:デフォルトの名無しさん [2021/12/04(土) 03:24:28.87 ID:54seiSNt.net]
- Rust使ったこと無いけど健全なマクロはいいなぁと思う。
- 786 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:28:16.65 ID:aNU60Xul.net]
- 今言われているasync, awaitの「非同期」ってちょっと違うけど、意味的には擬似スレッドみたいな感じだな。
I/O全般というより、XHRやfetchやsocketのように遅いネットワーク通信を複数同時に待つ時に使う 時に便利な気がする。 nativeのファイルI/Oの場合、処理が完了するまで待つ方が便利だし、余計なことを考えなくて済むので バグが少なくできるから、伝統的に同期方式を使うことが基本。
- 787 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:36:51.75 ID:aNU60Xul.net]
- print "hello\n";
と書いた場合に、print文は端末(terminal)などの別プロセスでの処理が 完了するまで待つことが多く、実行完了するには時間が掛かるが、 これを一々非同期にして、print 文が完了するまでに別の処理をする、 というようなことはすべきじゃない。 一番いいのは、print 文が完了するまではそこで待機して、ちゃんと それが完了してから次の文を実行すること。 つまり、同期的処理。
- 788 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 03:52:52.03 ID:6dkLKknu.net]
- >>769
え?? awaitはその待機という同期的処理をするためにあります したがって非同期のprint関数を呼んでも問題は起きずにその書かれてる通りになります
- 789 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 04:12:46.09 ID:aNU60Xul.net]
- >>770
でもそのコード部分では見て無い場所で、イベントループに戻ってしまって、 別のイベントハンドラが起動してしまう可能性が生まれ、 せっかく通常のシングルスレッドプログラミングでは起きない良い特徴が失われる。 そのため、シングルスレッドなのに排他処理が必要となってしまう。 排他処理は間違うととても危険であって、プログラミングのかなり上級者でも 気を使う必要がある。
- 790 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 04:28:23.02 ID:6dkLKknu.net]
- 見かけ上はどちらも関数処理完了まで待機する形で同じですが
「同期の関数を呼んだ場合」 →関数から戻って来るまでそのスレッドはブロックされる 「非同期の関数を呼んでawaitする場合」 →そのスレッドがブロックされることはなく他にタスクがあれば並行して実行される >>771 いいえ その場合はそのタイミングで並行して実行されたら困るタスクを持たなければいいだけです ○ その時は他に並行して実行されるタスクを持たない ○ 並行して実行されてもよいタスクだけを他に持つ ○ 並行して実行されるタスクの動作に制限がかかるようにロック等を持つ ✕ 並行して実行されたら困るタスクを対策なしに他に持つ 選択肢はたくさんあります これがプログラミングです
- 791 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 04:34:52.83 ID:aNU60Xul.net]
- >>772
Win32/MFC/WinForms/JavaのSwing/Android/ブラウザのJSで プログラミングしたこと有る? イベントループやイベントって自分で定義するものでは無いから 「タスクを持たないようにする」 っていうのは現実には不可能だぞ。
- 792 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 05:07:10.24 ID:6dkLKknu.net]
- >>773
もちろんRustでも自分でスケジューラを自作することは滅多になく selectやpollなど使用のイベントループを自分で書くことはありません それからここでのイベントとは当然selectやpollなどのイベントですから具体的にはファイルディスクリプタの読み書きOK等がイベントとなります もちろんこの処理はスケジューラが担当するので自分で書かなくてもいいです しかし新たなタスクを起こすかどうかはスレッドの時と同様にプログラマーの自由であり必要なら明示的に行います JavaScriptの場合もイベントループを管轄するスケジューラはブラウザでもNode.jsでもシステムとして持っているため関知しなくてもよいです ただしJavaScriptでは非同期関数を呼ぶこと自体が自動的にここでいう新たなタスクを起こすことになります あとは例えばブラウザ自体が暗黙的に動作しているタスクとしてみなすことも出来てそのタスクから新たなタスクを発火することもあります リスナー登録するタイプの利用時もそのパターンです
- 793 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 05:13:43.45 ID:aNU60Xul.net]
- >>774
MFC/WinForms/JavaのSwing/Androidなどでは、マウスイベントやキーボードイベント、 メニューイベントは基本的に常時イネーブル状態になったままにして使うので、await してしまうと、それぞれのハンドラに普通に入ってしまう。 そうなるとロジックが破綻するので排他処理するか、awaitする直前に、 一々ハンドラを disable にして、awaitの次の行に来た時に enableにする 必要がある。そんなメンドクサイことすべきじゃ無いし、そもそもdisable にするなら、非同期のメリットも無い。 そもそもGUIスレッドは、イベントハンドラの二重起動は禁止すべきとされている。
- 794 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 06:02:11.33 ID:6dkLKknu.net]
- >>775
プログラミング分野は無数にある中で なぜそんな特殊な環境だけを唐突に持ち出すのかも含めて分かりません 先ずは適用可能な分野から始めて経験と知識を積んで的確に判断できるようになってから結論づければよいかと
- 795 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 10:01:49.43 ID:wGH9SwaY.net]
- 数学の天才と言い切った手前、後に引けなくなってきたか
自分の触ったことのある範囲でいいから弁解しなくちゃ もうリンクトリストなんてどうでもいい、無知の印象を払拭するのが第一
- 796 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 16:50:56.54 ID:Peev2Fa+.net]
- 天才と言いつつテスト100点としか言えてない時点で程度は知れて馬鹿にされてるんだから今更取り繕わなくて良いのに
- 797 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 16:53:37.05 ID:d5QmhWSv.net]
- リンクリストの話はまだまだお聞きしたいと思っていますのに…
>>738 のリストのソートのご感想とか
- 798 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 16:55:24.53 ID:d5QmhWSv.net]
- >>778
数学や物理のテストは、B4 の白紙一枚をわたされて、これに回答とか証明を書け、みたいな感じですが、そんなテストで一度でも 100 点をとれるのなら、それはそれですごいとは思いますよ
- 799 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 17:09:21.39 ID:Peev2Fa+.net]
- >>780
引き合いに出してたのがセンター試験だったり東大入試だったりで大学入試の成績を誇るしかない人なんだなって思っていました
- 800 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 17:19:28.99 ID:2kIdNGW4.net]
- RustのLinked Listは遅いからRustはクソ言語
という論理は成立しましたか?
- 801 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 17:28:22.69 ID:d5QmhWSv.net]
- >>781
回答用紙の返却のない試験の結果がどうしてわかるのか疑問ですよね
- 802 名前:デフォルトの名無しさん mailto:sage [2021/12/04(土) 17:40:33.98 ID:EblMEd3X.net]
- どっちも中途半端な知識しかないのに他人の指摘は聞かないから救いようがない
隔離スレ立てたやつグッジョブ!
|

|