In reply to Jung Ik Moon:
I would consider the terms more or less interchangeable within SystemVerilog LRM. In the software OS world, a process is a container of one or more threads executing in a protected memory space.
My personal preference in SystemVerilog is using a process more like a declarative construct, like an always, initial, or fork block, and a thread as the active execution of statements within the the process. So there is always a one-to-one correspondence between a process and the thread of execution. In a fork/join_none block, each statement within the block creates a process, but their threads do not start executing until the parent thread blocks or terminates.