Ruby��Thread�AFiber�AKernel�Afork�ŕ��񏈗���v���Z�X�̐[�����F���G���W�j�A�^���S�҂̂��߂�Ruby 2.1����i11�j�i1/3 �y�[�W�j

�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

» 2014�N12��15�� 18��00�� ���J
[���F���c�D�^�A�ďC�F�R�����i�C������ЃA�W���C���E�F�A]

����̎�ȓ��e


uGWjA^S҂̂߂Ruby 2.1ṽCfbNX

�A�ږڎ�

�@�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

���ҏW����

�{�A�ڂ�Ruby 2.1�v���O���~���O�̓���A�ڂł��BRuby on Rails�ɂ‚��Ċw�т������͘A�ځu�J������ł����Ǝg����Rails 4�����v���������������B


�X���b�h�𑀂邽�߂�Thread�N���X

�@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������Ă݂�

�@���ۂɃ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."
thread01.rb
$ 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,
thread01.rb�̎��s��

�@���̃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

Thread�N���X���g�����ȒP�Ȏ��v�A�v���P�[�V����

�@�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
thread02.rb
thread02.rb�̎��s��

�@�܂�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

�@�@�@�@�@�@ 1|2|3 ���̃y�[�W��

Copyright © ITmedia, Inc. All Rights Reserved.

'; this.insertTarget = document.querySelector('#cmsBody .subscription') || document.querySelector('#cmsBody .inner'); }; BodyAdIMSWithCCE.prototype = Object.create(BodyAdContent.prototype); BodyAdIMSWithCCE.prototype.activate = function () { refreshGam('InArtSpecialLink'); } // global reference window.itm = itm; //entry point BodyAdEventBase.polyfill(); const bodyAdManager = BodyAdManager.getInstance(); bodyAdManager.addEventListener(BodyAdManager.EVENTS.READY, function (ev) { bodyAdManager.loadAdvertise(); }); bodyAdManager.init(); })();
�X�|���T�[����̂��m�点PR

���ڂ̃e�[�}

Microsoft  WindowsőO2025
AI for GWjAO
[R[h^m[R[h Zg by IT - ITGWjArWlX̒SŊ􂷂gD
Cloud Native Central by IT - XP[uȔ\͂gD
�V�X�e���J���m�E�n�E �y�����i�r�zPR
���Ȃ��ɂ������߂̋L��PR

RSS�ɂ‚���

�A�C�e�B���f�B�AID�ɂ‚���

���[���}�K�W���o�^

��IT�̃��[���}�K�W���́A �������A���ׂĖ����ł��B���Ѓ��[���}�K�W�������w�ǂ��������B