�I�[�v���\�[�X�̃I�u�W�F�N�g�w���v���O���~���O����uRuby�v�̕��@���ꂩ��w�Ԃ��߂̓���A�ځB�ŐV�ł�2.1�ɑΉ����Ă��܂��B����́A�X���b�h�������N���X��y�ʃX���b�h�A�u�O���[����v�ł�����Ruby����v���Z�X�𑀂邳�܂��܂ȃ��\�b�h�̎g�����Ȃǂ�������܂��B
�@�O��́uRuby��File�^IO�N���X�œ��͂Əo�́A�t�@�C���̓ǂݎ��Ə������݁A�t�B���^�[�쐬�v�ł́A�f�[�^�̓��o�͂ɂ��ĉ�����܂����B�A�ڑ�11��ɓ����鍡��́A�X���b�h�A�t�@�C�o�[�A�v���Z�X�Ƃ������g�s�b�N�ɂ��ĉ�����܂��B
�@Thread�N���X��Fiber�N���X���g�����ƂŁARuby�ł��������L�q���邱�Ƃ��\�ł��B�܂��A�O��Љ��IO�N���X���g�����ƂŁARuby�v���O��������v���Z�X�����ē��o�͂��s���܂��B
�@���܂��܂ȃv���O���~���O����ł͕����̂��߂̎d�g�݂��g����悤�ɂȂ��Ă��܂��B�������Ruby����O�ł͂Ȃ��AThread�N���X��Fiber�N���X���g���ĕ���v���O�������������Ƃ��ł��܂��B
�@�܂��ARuby����OS�ŗL�̃R�}���h��ʂ̃v���Z�X�Ƃ��Ď��s������A�������g��fork�i�t�H�[�N�j���ĕʃv���Z�X�Ƃ���Ruby�v���O���������s�����肷�邱�Ƃ��ł��܂��B
�{�A�ڂ�Ruby 2.1�v���O���~���O�̓���A�ڂł��BRuby on Rails�ɂ��Ċw�т������͘A�ځu�J������ł����Ǝg����Rails 4�����v���������������B
�@Ruby�ł�Thread�N���X�𗘗p���邱�ƂŁA��r�I�ȒP�ɃX���b�h�������L�q�ł��܂��B���������݂̎����ł́A���ɂ�鏈�����x�����_����Thread�N���X�𗘗p���邱�Ƃ͓���ł��B
�@1.9��OS�̃l�C�e�B�u�X���b�h�𗘗p����悤�ɂȂ�܂������A�ߋ��̃��C�u�����Ƃ̌݊�����ۂ��߁A��{�I�ɓ����Ɏ��s�����X���b�h��1�Ɍ��肳��Ă��܂��B�������ARuby������Thread�N���X�̃y�[�W�ɂ��ƁA���o�͂ɂ��҂����Ԃ�L�����p���邱�Ƃ�_�����X���b�h���͗L���ł���悤�ł��B
�@���ۂɃX���b�h�����A���̓�����ώ@���Ă݂܂��傤�Bthread01.rb�ɃT���v���R�[�h�������܂��B
names = %w(alice white-rabbit cheshire-cat) threads = [] names.each do |name| threads << Thread.new do 3.times do |i| print "#{name}:#{i}, " end end end threads.each { |t| t.join } puts "\nall threds are terminated."
$ ruby thread01.rb alice:0, white-rabbit:0, cheshire-cat:0, alice:1, alice:2, white-rabbit:1, white-rabbit:2, cheshire-cat:1, cheshire-cat:2,
�@���̃T���v���ł́A1�s�ڂŁunames�v�ϐ��ɃX���b�h�̖��O��\��������̔z����i�[���A2�s�ڂ�Thread�I�u�W�F�N�g�����Ă������߂̔z��uthread�v��p�ӂ��Ă��܂��B
�@3�s�ڂ́ueach�v���\�b�h�Ŕz�疼�O��1�����o���A4�s�ڂ́uThread.new�v�ɂ���ĐV���ȃX���b�h������Ă��܂��B�쐬�����X���b�h�̒��ōs�����������́A�uThread.new�v�Ƀu���b�N�Ƃ��ēn���܂��B�����ł́A6�`8�s�ڂ̂悤�ɁA3��X���b�h���ƂƂ��ɃC���f�b�N�X��W���o�͂ɗ����Ă��܂��B
�@���������X���b�h�́A�����ɔ��I�Ɏ��s�����̂ŁA�X���b�h���������̃X�N���v�g�i�����ł�thread01.rb�j�ł́A�X���b�h�̏I����҂K�v������܂��B���̂��߁A12�s�ڂ̂悤�ɁuThread#join�v���\�b�h���g���āA�X���b�h�̏I����҂��Ă��܂��B�S�ẴX���b�h�̏������I���A14�s�ڂ́uputs�v�����s����ăX�N���v�g�̎��s�͏I�����܂��B
�@thread01.rb�����x�����s���āA���̂��тɏo�͓��e���ς�邱�Ƃɒ��ӂ��Ă��������B�ǂ̂悤�ȏ����ŃX���b�h�����s����邩�́AOS��Ruby�C���^�[�v���^�[�ɂ���Č��߂��邩��ł��B
�@�X���b�h���g�������Ȃ�T�^�I�ȃV�`���G�[�V�����Ƃ��ẮA�������[�v���A���[�U�[�̓��͂�҂Ƃ����悤�ȃp�^�[���ł��B���̂悤�ȏꍇ�A�������[�v�����ƃ��[�U�[�̓��͂�҂�������悤�ȏ������A2�̃X���b�h�ɕ����邱�ƂŎ����ł��܂��B�����ł́A�X���b�h���g���ĊȒP�Ȏ��v������Ă݂܂��傤�B
require "io/console" view_thread = Thread.new do loop do print "\033[2K\r#{Time.now.strftime("%F %T")}" sleep 1 end end input_thread = Thread.new do while STDIN.getch != "q"; end puts view_thread.kill end view_thread.join input_thread.join
�@�܂�1�s�ڂŁuio/console�v��require���Ă��܂����A�����11�s�ڂŕW�����͂���1�������͂����Ƃ��ɁA�G���^�[�L�[�Ȃ��ŕ�������荞�ނ��߂ɕK�v�ƂȂ�܂��B
�@3�`8�s�ڂł́A���v��\�����邽�߂̃X���b�h�����āA�ϐ��uview_thread�v�Ɋi�[���Ă��܂��B���̃X���b�h�́A�uloop�v�ɂ�閳�����[�v�ɂ���āA�Ђ�����1�b�����Ɍ��݂̎�����\�����܂��B
�@5�s�ڂ́uprint�v�̈����́u\033[2K�v�͌�����Ȃ���������܂��A����̓^�[�~�i���Ɂu��ʂ��N���A����v�Ƃ����w���𑗂邽�߂̐���R�[�h�ł��B�܂��A�����u\r�v�͕��A��\�������Ȃ̂ŁA��ʂ��N���A�����̂��J�[�\�������[�Ɉړ����܂��B
�@�����u#{}�v���ł̏����ŁuTime#strftime�v���\�b�h���g���āA�����̓��t�ƌ��ݎ�����\�����Ă��܂��B���̌�6�s�ڂ́usleep�v���\�b�h��1�b�҂��A���[�v�̐擪�ɖ߂�܂��B
�@10�`14�s�ڂł́A�W�����͂�҂��邽�߂̃X���b�h�����āA�ϐ��uinput_thread�v�Ɋi�[���Ă��܂��B���̃X���b�h�̒��ł́uSTDIN.getch�v�ŃL�[�{�[�h����̓��͂�҂��A���ꂪ����q�łȂ�����Awhile���[�v�ɂ���čēx�҂���ԂɂȂ�܂��B����q�����͂����A�uputs�v���\�b�h�ʼn��s���o�͂����̂��A13�s�ڂ̂悤�ɁuThread#kill�v���\�b�h���g���āuview_thread�v���I�������A�uinput_thread�v���g���I�����܂��B
�@16�s�ڂ�17�s�ڂł́Athread01.rb�̏ꍇ�Ɠ��l�A�e�X���b�h�̏I����҂��܂��B�uinput_thread�v��q�L�[���������Ƃɂ���ďI�����A���̍ہuview_thread�v���I������̂ŁA���̎��_�Ńv���O�����͏I�����܂��B
Copyright © ITmedia, Inc. All Rights Reserved.