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

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

�����I�ȃX���b�h����������u�y�ʃX���b�h�vFiber�N���X

�@�O�y�[�W�܂łŁAThread�N���X��p�����X���b�h�̐����Ƃ��̗��p���@�̊�{���w�т܂����B�����ł́A������u�y�ʃX���b�h�v�ƌĂ΂��AFiber�N���X�ɂ‚��Č��Ă����܂��傤�B

Fiber�N���X�̓���

�@Fiber�N���X���g���ƁAThread�N���X�̂悤�ɃX���b�h�������ł���̂ł����A������͏����ѐF���Ⴂ�܂��BFiber�N���X�ł�Thread�N���X�ƈႢ�AFiber�I�u�W�F�N�g�𐶐������e�̃R���e�L�X�g�ƁAFiber�I�u�W�F�N�g���ł̎q�R���e�L�X�g�̊Ԃ��A�����I�Ɍ݂��ɍs�����藈���肷�邱�Ƃ��ł��܂��B

Fiber�N���X�̎g�p��

�@���t�ł͓`���Â炢�̂ŁAfiber01.rb�ɗ��p��������܂��傤�B

g = Fiber.new do |x|
  loop { Fiber.yield(x); x += 1 }
end
 
5.times { puts g.resume(0) }
fiber01.rb
$ ruby fiber01.rb
0 
1
2
3
4
fiber01.rb�̎��s����

�@�ł́A�����̗����ǂ��܂��傤�B�܂�1�s�ڂŁuFiber.new�v�ɂ����Fiber�I�u�W�F�N�g�𐶐����A�ϐ�g�ɑ�����Ă��܂��B�t�@�C�o�[�̒��Ŏ��s���鏈���́A`Fiber.new`�Ƀu���b�N�Ƃ��ēn���܂��B

�@2�s�ڂ��t�@�C�o�[�̒��Ŏ��s���鏈���̖{�̂ł��B�����ł́Aloop���g���āA�uFiber.yield(x)�v�����s�����̂��Ax��1�𑫂����ޏ����𖳌����[�v�Ƃ��ċL�q���Ă��܂��B���́A����yield���t�@�C�o�[�̓����𗝉����錮�ƂȂ�܂��B

�@5�s�ڂł́A�t�@�C�o�[�ug�v�́uresume�v���\�b�h�Ɉ�����0��^���ăt�@�C�o�[�����s���Ă��܂��B�t�@�C�o�[�̓X���b�h�ƈقȂ�A�����I�Ɂuresume�v�ɂ���ē������Ȃ�����A�������Ƃ͂���܂���B

�@�uresume�v���\�b�h�ɗ^����ꂽ0�̓t�@�C�o�[�̃u���b�N�ϐ��ux�v�Ɋi�[����A2�s�ڂɏ������ڂ�܂��B�t�@�C�o�[���ŁuFiber.yield�v���\�b�h�����s�����ƁA�uyield�v�ɗ^����������Ԃ�l�Ƃ��ĕԂ��āA�t�@�C�o�[���ł̎��s�͈ꎞ�I�Ɏ~�܂�܂��B�‚܂�A2�s�ڂ́uFiber.yield(x)�v�ɏo��������_�ŁA5�s�ڂł�1��ڂ̃��[�v�ł�0���o�͂��Ď��̃��[�v�Ɉڍs���܂��B

�@5�s�ڂ�2��ڂ̃��[�v�ōĂсuresume�v���\�b�h�����s�����ƁA�t�@�C�o�[�ug�v�͏������ĊJ���ux += 1�v�����s����ĕϐ��ux�v�̒��g��1�ɂȂ�܂��B���̂��ƁA2�s�ڂ�loop�ɂ���Ĉ͂܂�Ă���̂ŁA�ĂсuFiber.yield(x)�v�����s����A5�s�ڂɏ������߂�A1���o�͂���܂��B���̂悤�ȓ�����J��Ԃ����ƂŁA0����4�̐�������������܂��B

�֐��^������ۂ��u�W�F�l���[�^�[�v�Ƃ�

�@���̍l�����́A��ʓI�Ɂu�W�F�l���[�^�[�v�ƌĂ΂�A���̖��̒ʂ�A���������̃f�[�^��𐶐�����悤�Ȃ��̂ł��B�W�F�l���[�^�[�̒��̐��E�ł́A�����܂Ŗ�����1���‘傫�����������𐶐��������Ă��邾���ł��B

�@�����悤�ȍl�����́A�֐��^����ɂ����āA�������̃��X�g�𐶐�����悤�Ȋ֐����`���āA�x���]���ɂ���Ĉ�萔�̗v�f�����ƒ��X�g�𓾂�悤�ȏꍇ�ɑ������܂��B

Thread��Fiber�͂��ꂾ���Ŗ{��1���ł���قǕ��G

�@�����ł́A�X���b�h��t�@�C�o�[�̊�{�I�Ȏg�������Љ�܂����B���̂Ƃ���A���񏈗��ł́A�f�[�^�̐�������ۂ‚��Ƃ�����A�f�o�b�O������ł���ȂǁA���񏈗����ꎩ�g��1���̖{�ɂȂ��Ă��܂��悤�ȕ��G���������Ă��܂��B

�@Thread�N���X��Fiber�N���X�́A�����ł͏Љ�Ă��Ȃ��ł����A�����ƕ��G�Ȃ��Ƃ��s�����߂̃��\�b�h�������Ă��܂��B�ڍׂ́ARuby�̌����y�[�W�Ȃǂ��Q�Ƃ��Ă��������B

�u�O���[����v�ł�����Ruby����g�v���Z�X�h�𑀂�

�@�����܂ŃX���b�h�������s�����߂�Thread�N���X��Fiber�N���X�ɂ‚��ďЉ�܂����BRuby�̓X���b�h���T�|�[�g�������ŁA�V�X�e���ŗ��p�ł���ʂ̃v���O�������N�����āA�������‚Ȃ���悤�ȁu�O���[�����v�Ƃ��Ă̑��ʂ������܂��B

�@��������́ARuby�X�N���v�g���瑼�̃v���O�������N�����A�����𑀂���@���w�т܂��B

�ł��ȒP�Ȃ̂́u`�v�i�o�b�N�N�I�[�g�j�ň͂ޕ��@

�@Ruby�X�N���v�g���瑼�̃R�}���h���N������ł��ȒP�ȕ��@�́A�u`�v�i�o�b�N�N�I�[�g�j���g�������ł��傤�Bpry�Ŋm�F���Ă݂܂��B

[1] pry(main)> `date`
=> "Sat Nov 22 10:23:12 JST 2014\n"

�@���̃R�}���h���N�����ďo�͂𓾂邾���Ȃ�ȒP�ł��B��̂悤�ɁA�o�b�N�N�I�[�g�Ɏ��s�������R�}���h���͂ނ����ł��B�R�}���h�̏o�͕͂�����Ƃ��ĕԂ�܂��B

�W���o�͂��W���G���[�o�͂ɗ����uKernel.#system�v���\�b�h

�@������AKernel���W���[���ɒ�`����Ă���usystem�v���\�b�h���g�����@������܂��Bpry�Ŏ��s���Ă݂܂��傤�B

[2] pry(main)> system("date")
Sat Nov 22 10:26:33 JST 2014
=> true

�@�usystem�v���\�b�h�̏ꍇ�́A�o�͂̓v���O�����̌Ăяo�����Ɠ����W���o�͂��W���G���[�o�͂ɗ���܂��B�usystem�v���\�b�h�̕Ԃ�l��true��false�ŁA�R�}���h�̏I���X�e�[�^�X��0�i����j�Ȃ�true�A����ȊO�i�����Ă��̏ꍇ�̓G���[�ŏI�������ꍇ�j��false���Ԃ�܂��B

Ruby�̃v���Z�X�Ƌ��ɏI������uKernel.#exec�v���\�b�h

�@���ɂ��A�uexec�v���\�b�h���g�����@������܂��B�������A�uexec�v���\�b�h���g�����ꍇ�́A�usystem�v���\�b�h�̂悤�Ɏ��s���Ԃ��Ă��邱�Ƃ͂Ȃ��A���̂܂܁uexec�v�����s����Ruby�̃v���Z�X�Ƌ��ɏI�����܂��B

�@pry�Ŏ����Ă݂܂��傤�B�uexec "date"�v�����s���ē��t���o�͂��ꂽ��Apry���I�����邱�Ƃ�������ł��傤�B

[8] pry(main)> exec "date"
Sat Nov 22 11:30:50 JST 2014

���Ԃ̂�����R�}���h��񓯊��Ɏ��s����ꍇ�́uProcess.spawn�v�uKernel.#spawn�v���\�b�h

�@���Ԃ̂�����R�}���h��񓯊��Ɏ��s�������ꍇ�́A�uProcess.spawn�v���\�b�h�����ɗ����܂��BKernel���W���[���ɂ������ȁuspawn�v���\�b�h����`����Ă���̂ŁA�P�Ɂuspawn�v�����ł������܂��B

�@���p���process01.rb�Ɏ����܂��傤�B

pid = Process.spawn "sleep 5; echo terminated" # spawn �ł�
puts "waiting..."
puts "waiting..."
puts "waiting..."
Process.waitpid(pid)
process01.rb
$ ruby process01.rb 
waiting...
waiting...
waiting...
terminated
process01.rb�̎��s����

�@1�s�ڂŐV�����v���Z�X�𗧂��グ�āAsleep�R�}���h��echo�R�}���h�����s���Ă��܂��Bsleep�͎w�肵���b���������~�߂�R�}���h�ŁA�����ł�5�b�X���[�v������ɁA�W���o�͂Ɂuterminated�v�Ƃ��������𗬂��悤�ȃv���Z�X�𗧂��グ�Ă��܂��B

�@2�`4�s�ڂł́A3��uputs�v�����s���āA�W���o�͂Ɂuwaiting...�v�Ƃ���������𗬂��Ă��܂��B

�@�uspawn�v�ŗ����グ���v���Z�X�͔񓯊��I�Ɏ��s�����̂ŁA�����܂ł�4�s�����ł�Ruby�X�N���v�g���I�����Ă��܂��܂��B�����ŁA�I����҂ꍇ�ɂ�5�s�ڂ̂悤�ɁuProcess.waitpid�v���\�b�h���g���ďI����҂��܂��B1�s�ڂ�pid�Ƀv���Z�XID���i�[�����̂ŁA5�s�ڂ́uwaitpid�v�ɂ��̃v���Z�XID��^���Ă��܂��B

�@���s���ʂ�����ƕ�����悤�ɁA�񓯊���sleep��echo�����s����Ă���̂ŁA��Ɂuwaiting...�v���\������Ă���uterminated�v���\������Ă��܂��B�usystem�v��o�b�N�N�I�[�g�ɂ����s���ƁA5�b�҂��āuterminated�v�Ɖ�ʂɕ\������Ă���uwaiting...�v��3��\������邱�ƂɂȂ�܂��B

���̃v���Z�X�̏o�͂���������uIO.popen�v���\�b�h

�@�o�b�N�N�I�[�g��usystem�v���\�b�h���g�����ꍇ�́A�Ăяo�����R�}���h�̏������I���܂ŏo�͂𓾂邱�Ƃ��ł��܂���B

�@�ł��̂ŁAping�R�}���h�̂悤�ɁA�W���o�͂ɂЂ�����o�͂��s����悤�ȏꍇ�ɂ��܂��������Ƃ��ł��܂���B���̂悤�ȏꍇ�A�uIO.popen�v���\�b�h���g���ƁA���X�ɑ����Ă���o�͂������ł��܂��Bprocess02.rb�ɗ�������܂��傤�B

IO.popen("ping -c 10 localhost", "r") do |pipe|
  while line = pipe.gets
    line.match(/time=(\d\.\d+) ms/)
    puts line if $1.to_f < 0.1
  end
end
process02.rb
$ ruby process01.rb 
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.046 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.035 ms
64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.038 ms
64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.077 ms
64 bytes from 127.0.0.1: icmp_seq=9 ttl=64 time=0.035 ms
 
--- localhost ping statistics ---
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.035/0.099/0.246/0.073 ms
process02.rb�̎��s��

�@1�s�ڂ́uIO.popen�v�ŁAlocalhost�ɑ΂���ping��10��ł‚悤��ping�R�}���h�����s���A�u���b�N�ϐ��upipe�v��IO�I�u�W�F�N�g������܂��Bping�R�}���h�̏o�͂��p�C�v�ɗ����A�p�C�v���痬��Ă����f�[�^���A�ugets�v���\�b�h�Ŏ��o���C���[�W�ł��B

�@�upipe�v��IO�I�u�W�F�N�g�ł��̂ŁA�t�@�C����W�����o�͂̓ǂݏ����Ɠ����v�̂Ńf�[�^�����o���܂��B2�s�ڂ�pipe����1�s�o�͂����o���A�ϐ�line�Ɋi�[���Ă��܂��B�O��Љ���uio05.rb�v�ƑS�������悤�ȃp�^�[���ɂȂ��Ă��邱�Ƃɒ��ӂ��Ă��������B

�@���̂悤�ɁA���̃R�}���h�̓��o�͂ł���IO�I�u�W�F�N�g�Ƃ��Ē��ۉ�����Ă��āA�����悤�Ɉ�����悤�ɂȂ��Ă��܂��B�����ł́A�ȒP�ɐ������邽�߂ɏo�͂����o���Ă��邾���ł����A���������͂��邱�Ƃ��ł��܂��B����͑f���炵�����Ƃł��I

�@3�s�ڂ͐��K�\�����g���Ă��ď�����₱�����ł����Aping�̏o�͂́utime=0.046 ms�v�̐��l�̕��������𔲂��o���悤�Ȑ��K�\���ɂȂ��Ă��܂��B�}�b�`���������̕����́A�O���[�o���ϐ��u$1�v�Ɋi�[����܂��B

�@4�s�ڂ́u$1�v�̒l�������ɕϊ����āA0.1��菬������ΕW���o�͂�ping�̌��ʂ����̂܂ܗ����܂��B0.1���傫����΁A���̂܂܎̂ĂĂ��܂��܂��B����3�s�ڂŃ}�b�`���Ȃ������ꍇ�i�uPING localhost (127.0.0.1): 56 data bytes�v�̍s�Ȃǁj�́A�u$1�v��nil���i�[����A�unil.to_f�v�̌��ʂ�0.0�ƂȂ�̂ŁA���̍s�͂��܂���ɏo�͂���܂��B

�@���̂悤�ɁA���̃v���Z�X�̏o�͂��t�B���^�[����悤�ȃv���O�������AIO�I�u�W�F�N�g�𗘗p���邱�ƂŊȒP�ɍ�邱�Ƃ��ł��܂��B

Copyright © ITmedia, Inc. All Rights Reserved.

'; if( !this.isSubscription ) { 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�[�}

4AI by IT - AIAAA
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